首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

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

2012-01-21 
存储过程:执行动态语句(动态表名)出错存储过程如下:------------------------------------------CREATEPRO

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

--这样,要加引号

热点排行