gpt4 book ai didi

sql-server - T-SQL 使用变量作为表名

转载 作者:行者123 更新时间:2023-12-02 03:28:30 25 4
gpt4 key购买 nike

我正在尝试将 SSMS 中的多个存储过程压缩为一个存储过程。所有过程在功能上都非常相似:遍历表并将给定字段的值更改为给定变量。这些过程之间唯一真正的区别是其中引用的表和字段。

根据 SO 上的其他帖子,我得出以下结论:

DECLARE @strQuery NVARCHAR(500)

SET @strQuery =
'UPDATE ' + @strTableName +
' SET ' + @strField + ' = ' + @strNewFieldValue +
' WHERE primaryKey = ' + CAST(@intNumber AS NVARCHAR(50));

EXECUTE @strQuery

但是,当我尝试运行它时,我收到以下错误:

Could not find stored procedure 'UPDATE dbo.tableName SET dbo.Field = NewFieldValue WHERE pri

这是我想运行的查询,最后一点被截断。更改 @strQuery 变量的大小不会影响错误消息的长度。我有什么遗漏的吗?

最佳答案

使用sp_execute_sql。及参数:

DECLARE @strQuery NVARCHAR(MAX);

SET @strQuery = '
UPDATE ' + strTableName + '
SET ' + @strField + ' = @strNewFieldValue
WHERE primaryKey = @intNumber';

EXEC sp_executesql @strQuery,
N'@strNewFieldValue varchar(255), @intNumber int',
@strNewFieldValue=@strNewFieldValue, @intNumber=@intNumber;

请注意,文字值已替换为参数。即使 SQL 注入(inject)不是问题,这也会简化查询并确保值中的奇怪字符不会过度影响查询。

此外,SQL Server 允许字符串跨行。所以我使用该功能删除了一些单引号。

关于sql-server - T-SQL 使用变量作为表名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52526439/

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