SQL Server 2012替换动态SQL中Select语句中的字符串

SQL Server 2012替换动态SQL中Select语句中的字符串,sql,sql-server,sql-server-2012,Sql,Sql Server,Sql Server 2012,我想替换动态sql中select语句中的部分字符串,但收到错误 这是我的密码: set @oldTblPrefix = 'ABC' set @newTblPrefix = 'XYZ' set @sourcetid = 17 set @template =' INSERT INTO ' +@DB + '.[Tforms] (id ,[tablename]) select id, replace([tablename],

我想替换动态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”无效


您需要在变量前后添加单引号,每边两个。一个显示在结果字符串中,另一个显示为转义字符

在最后用print替换execute,直到得到它,并检查结果查询是否正确

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

您需要在变量前后添加单引号,每边两个。一个显示在结果字符串中,另一个显示为转义字符

在最后用print替换execute,直到得到它,并检查结果查询是否正确

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