我有一个像这样的SQL查询字符串:

DECLARE @sql varchar(max)
SET @sql = ' INSERT INTO ' + @tempTable1 +
           ' SELECT 0 as Type1, 0 as Type2, ' +
             '''' + @name + ''' as CompanyName ' +
           ' FROM #tempTable2 tt2'

该查询运行正常,除了两个名称恰好包含一个单引号(例如:Pete's Corner)。当这些名称中的任何一个成为查询的一部分时,它将中断查询字符串。我认为最简单的方法是替换像replace(@name,'''','')这样的单引号,但是它不起作用,因为我已经在一个字符串中,因此会影响其余的字符串。该声明。不幸的是,更改表本身不是一种选择。

如何替换或删除这些单引号?

另外:我很抱歉,我没有包括@name实际上是通过联接从另一个数据库表中填充的部分,因此在创建字符串之前设置@name的值对我来说很困难。

最佳答案

我认为应该这样做:

 DECLARE @sql varchar(max)
SET @sql = ' INSERT INTO ' + @tempTable1 +
       ' SELECT 0 as Type1, 0 as Type2, ' + ''''+
         replace( @name ,'''','''''')+''''+' as CompanyName
       FROM #tempTable2 tt2'

09-26 17:40
查看更多