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

动态SQL得不到变量的值
我在一存储过程中先
用一@sql= 'insert   into   ... '

set @NewsID=@@IDENTITY
print @NewsID   --正常    

set @sql= 'insert into   '+@dbname+ '.[dbo].[articleofchannel]       (channelid,articlepageid)   values( '+@ChannelID+ ', '+@NewsID+ '   ) '     --在这儿就出错了


print @sql
--exec(@sql)
调用的时候总是语法错误
为啥在动态语句中得不到变量的值?


服务器:   消息   245,级别   16,状态   1,过程   A_PROC_NEWS_INSERT,行   59
将   varchar   值   'insert into   szonlinenew.[dbo].[articleofchannel]       (channelid,articlepageid)   values(1, '   转换为数据类型为   int   的列时发生语法错误。


------解决方案--------------------

--需要先转换为 字符型,如:


set @sql= 'insert into '+@dbname+ '.[dbo].[articleofchannel] (channelid,articlepageid)
values( '+ cast(@ChannelID as varchar(100))+ ', '+ cast(@NewsID as varchar(100))+ ' ) ' --在这儿就出错了


------解决方案--------------------
数值型或日期型,都需要先转换为字符型,再连接到SQL串中。