有关存储过程的执行
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())'