日期:2014-05-18  浏览次数:20422 次

存储过程:执行动态语句(动态表名)出错
存储过程如下:
------------------------------------------
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+ ' ' ') '

--这样,要加引号