SQL Server 2012替换Dynamic sql中Select语句中的字符串

时间:2017-10-06 08:46:24

标签: sql sql-server sql-server-2012

我想在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'无效。

1 个答案:

答案 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