读书人

存储过程:执行动态语句(动态表名)出

发布时间: 2012-01-21 21:31:43 作者: rapoo

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

--这样,要加引号

读书人网 >SQL Server

热点推荐