【发布时间】:2021-10-11 14:55:19
【问题描述】:
我正在尝试将字符串参数连接到 sp_executesql 语句,但找不到方法。我很可能没有在净资产中搜索到正确的词。我想要做的可以用下面的代码来举例说明,我希望 sp_executesql 语句给出与我的第一个打印语句相同的结果 (print(@t1 + @t2):
declare @r nvarchar(max), @t1 nvarchar(2), @t2 nvarchar(2)
set @t1 = 'AA'
set @t2 = 'BB'
print(@1 + @t2)
set @r = 'print(@t)'
exec sp_executesql @r, N'@t nvarchar(100)', @t = ?
我试过了:
@t = @t1 + @t2
和
@t = concat(@t1, @t2)
我的第一个问题:这是否可能(我猜是)?实际上,这是关于在多个表上进行调整和计算。表名由三部分组成;前缀、名称和后缀。每次迭代所涉及的数据库和部分表名都会以不同的方式发生变化。在这种特殊情况下,第一次迭代是使用一个数据库和一个表。第二次迭代改变了数据库和表名。第三次迭代与第二次迭代使用相同的数据库,相同的前缀和名称,但具有不同的后缀,依此类推。这可以通过表名的不同部分的变量来解决,这些变量在每次迭代时连接到“database.schema.table 名称”。
我的第二个问题:应该如何编写代码才能使其工作(如果可能的话)?
【问题讨论】:
-
你为什么首先在这里使用
sys.sp_executesql?您真正想在这里实现什么?sys.sp_executesql通常用于要执行动态SQL时;你这里没有动态 SQL。 -
我需要遍历几个表并为每个循环更改 5 个变量,其中 2 个取决于其他 1 个的值和另外 4 个在这部分中是静态的“全局”变量代码。今天我们用大量的代码来解决这个问题,这对维护来说是一场噩梦,我认为也许 sp_executesql 可能是解决方案。否则,我将使用一系列 if 语句来解决它……(或者如果我被允许,则使用 Python……我不是)。 :)
-
向我们展示您在此处尝试解决的真正问题,而不是问题 Y。请参阅XY Problem
-
对我上面的第一个问题做了一些额外的解释。代码被锁定在一个安全的环境中,我无法从那里导出它。
-
这并不能解释你真正想要达到的目标,@MarJer。你所说的循环和“全局变量”在哪里(你的意思是像
@@VERSION吗?)。
标签: tsql sp-executesql