日期:2014-05-17  浏览次数:21174 次

有关存储过程的执行
USE [JKXTDB]
GO
/****** Object:  StoredProcedure [dbo].[Pro_createtable]    Script Date: 12/07/2013 17:01:25 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
--IF NOT EXISTS(select * from sysobjects where id = object_id(@tablename))
--BEGIN
ALTER PROC [dbo].[Pro_createtable]
@tablename VARCHAR(100)
AS

IF EXISTS(SELECT * FROM sysobjects WHERE id = object_id('['+@tablename+']'))
BEGIN
SELECT '该表已存在!'
RETURN
END

DECLARE @sSql  VARCHAR(1000)
SET @sSql='CREATE TABLE ['+@tablename+'](
[编号] [int] NOT NULL Primary Key,
[产生时间] [datetime] NOT NULL,
[事件源] [int] NOT NULL,
[事件目标] [int] NOT NULL,
[事件类型] [int] NULL,
[事件子类型] [int] NULL,
[事件结果] [int] NULL,
[事件描述] [varchar] (3000) NULL,
[入库时间] [datetime] NULL
);
INSERT INTO 索引表(表名称,时间区间) VALUES('+@tablename+',getdate())'
EXEC(@sSql)
IF @@ERROR<>0
BEGIN
SELECT '创建表失败!'
END
ELSE
BEGIN  
SELECT '创建表成功!'
END    

RETURN




为什么执行时候exec Pro_createtable '2013jklk'  它提示jklk附近有语法错误,不允许使用jklk,有效表达式包括常量,常量表达式或者变量(在某些上下文中),不允许使用列名。。。。
存储过程哪里有错呀,大家帮帮忙

------解决方案--------------------
把插入语句哪里修改下就可以了,传入的是字符串,要加多一个单引号


DECLARE @sSql  VARCHAR(1000)
SET @sSql='CREATE TABLE ['+@tablename+'](
[编号] [int] NOT NULL Primary Key,
[产生时间] [datetime] NOT NULL,
[事件源] [int] NOT NULL,
[事件目标] [int] NOT NULL,
[事件类型] [int] NULL,
[事件子类型] [int] NULL,
[事件结果] [int] NULL,
[事件描述] [varchar] (3000) NULL,
[入库时间] [datetime] NULL
);
INSERT INTO 索引表(表名称,时间区间) VALUES('''+@tablename+''',getdate())'