存储过程:执行动态语句(动态表名)出错
存储过程如下:
------------------------------------------
CREATE PROCEDURE InsertTable
(
@tableName varchar(50) ,
@SID varchar(10) ,
@SName varchar(10) ,
@SDatetime varchar(10)
)
AS
declare @SQL varchar(3000)
set @SQL = 'INSERT INTO '+@tableName+ ' (SID,SName,SDatetime) VALUES( '+@SID+ ', '+@SName+ ', '+@SDatetime+ ') '
exec (@SQL)
GO
执行如下:
---------------------------------------------
DECLARE @RC int
DECLARE @tableName varchar(50)
DECLARE @SID varchar(10)
DECLARE @SName varchar(10)
DECLARE @SDatetime varchar(10)
-- 设置参数值
set @tableName= 'HB_Slyknew01 '
set @SID= '18 '
set @SName= 'Li '
set @SDatetime= '2007-1-9 12:15:30 '
EXEC @RC = [HB].[dbo].[HB_InsertSlyknew] @tableName, @SID, @SName, @SDatetime
结果错误如下:
--------------------
服务器: 消息 128,级别 15,状态 1,行 1
在此上下文中不允许使用 'Li '。此处只允许使用常量、表达式或变量。不允许使用列名。
服务器: 消息 170,级别 15,状态 1,行 1
第 1 行: '1 ' 附近有语法错误。
改为下面的内容后就可以了,但是插入的日期时间不是传入的值
set @SName= '12 '
set @SDatetime= '2007-1-9 '
请教各位高手!
------解决方案--------------------set @SQL = 'INSERT INTO '+@tableName+ ' (SID,SName,SDatetime) VALUES( ' ' '+@SID+ ' ' ', ' ' '+@SName+ ' ' ', ' ' '+@SDatetime+ ' ' ') '
-----
对于varchar要用单引号引起来的。
------解决方案--------------------set @SQL = 'INSERT INTO '+@tableName+ ' (SID,SName,SDatetime) VALUES( '+@SID+ ', ' ' '+@SName+ ' ' ', ' ' '+@SDatetime+ ' ' ') '
--这样,要加引号