gpt4 book ai didi

当变量包含单引号时 SQL 动态查询字符串中断

转载 作者:行者123 更新时间:2023-12-02 08:14:45 24 4
gpt4 key购买 nike

我有一个如下所示的 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)之外,查询运行良好。当这些名称之一成为查询的一部分时,它会破坏查询字符串。我认为最简单的方法是替换单引号,例如替换(@name,'''',''),但它不起作用,因为我已经在字符串中,所以它影响了其余部分该声明。不幸的是,改变表格本身并不是一个选择。

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

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

最佳答案

为什么你需要这样做?您应该将强参数传递给 sp_executesql,而不是将所有参数合并到单个字符串中并使用 EXEC()More info on that here .

DECLARE @sql NVARCHAR(MAX), @name NVARCHAR(32);

SET @name = 'Pete''s Corner';

SET @sql = 'INSERT INTO ' + @tempTable1 +
' SELECT 0 as Type1, 0 as Type2, @name as CompanyName ' +
' FROM #tempTable2 tt2';

EXEC sp_executesql @sql, N'@name NVARCHAR(32)', @name;

我认为 @name 参数实际上是从其他地方填充的,如果使用正确的参数化,您不必处理转义 '

现在我不太确定 @tempTable1 应该代表什么,或者您是否可以从此范围访问 #tempTable2 ,但是每当您发现自己正在运行替换需要 '''''''''' (或两者),您应该问问自己是否有更好的方法。

关于当变量包含单引号时 SQL 动态查询字符串中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18344713/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com