当前位置: 代码迷 >> Sql Server >> 存储过程:执行动态语句(动态表名)出错解决方案
  详细解决方案

存储过程:执行动态语句(动态表名)出错解决方案

热度:6   发布时间:2016-04-27 16:02:05.0
存储过程:执行动态语句(动态表名)出错
存储过程如下:
------------------------------------------
CREATE     PROCEDURE   InsertTable
(
@tableName   varchar(50)   ,
@SID   varchar(10)   ,
@SName   varchar(10)   ,
@SDatetime   varchar(10)  
)
  AS
declare   @SQL   varchar(3000)  

set   @SQL   =   'INSERT   INTO   '[email protected]+ '     (SID,SName,SDatetime)     VALUES( '[email protected]+ ', '[email protected]+ ', '[email protected]+ ')   '

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 '[email protected]+ ' (SID,SName,SDatetime) VALUES( ' ' '[email protected]+ ' ' ', ' ' '[email protected]+ ' ' ', ' ' '[email protected]+ ' ' ') '

-----
对于varchar要用单引号引起来的。
------解决方案--------------------
set @SQL = 'INSERT INTO '[email protected]+ ' (SID,SName,SDatetime) VALUES( '[email protected]+ ', ' ' '[email protected]+ ' ' ', ' ' '[email protected]+ ' ' ') '

--这样,要加引号

  相关解决方案