我想在Dynamic sql的select语句中替换部分字符串,但是我收到了错误。
这是我的代码:
set @oldTblPrefix = 'ABC'
set @newTblPrefix = 'XYZ'
set @sourcetid = 17
set @template ='
INSERT INTO ' +@DB + '.[Tforms]
(id
,[tablename])
select id,
replace([tablename],'+@oldTblPrefix+','+@newTblPrefix+')
from '+ @DB+ '.[Tforms] where tid=' +str(@sourcetid)
exec sp_Executesql @template
但我收到这些错误:
无效的列名称'ABC'。列名称'XYZ'无效。
答案 0 :(得分:0)
您需要在变量之前和之后添加单引号 - 每边两个。一个显示在结果字符串中,另一个显示为转义字符
在执行结束时将执行替换为print,直到获得它为止,并检查生成的查询是否正确。
set @template ='
INSERT INTO ' +@DB + '.[Tforms]
(id
,[tablename])
select id,
replace([tablename],'''+@oldTblPrefix+''','''+@newTblPrefix+''')
from '+ @DB+ '.[Tforms] where tid=' +str(@sourcetid)
PRINT @template
--exec sp_Executesql @template