gpt4 book ai didi

sql - 如何在动态sql语句中使用表变量?

转载 作者:行者123 更新时间:2023-12-01 17:36:52 24 4
gpt4 key购买 nike

在我的存储过程中,我在过程顶部声明了两个表变量。现在我尝试在动态 sql 语句中使用该表变量,但在执行该过程时收到此错误。我使用的是 Sql Server 2008。

这就是我的查询的样子,

set @col_name =  'Assoc_Item_' 
+ Convert(nvarchar(2), @curr_row1);

set @sqlstat = 'update @RelPro set '
+ @col_name
+ ' = (Select relsku From @TSku Where tid = '
+ Convert(nvarchar(2), @curr_row1) + ') Where RowID = '
+ Convert(nvarchar(2), @curr_row);

Exec(@sqlstat);

我收到以下错误,

必须声明表变量“@RelPro”。必须声明表变量“@TSku”。

我尝试将表置于动态查询的字符串 block 之外,但无济于事。

最佳答案

在 SQL Server 2008+ 上,只要您不需要更新表本身中的值,就可以使用表值参数将表变量传递给动态 SQL 语句。

因此,从您发布的代码来看,您可以将此方法用于 @TSku,但不能用于 @RelPro

下面的示例语法。

CREATE TYPE MyTable AS TABLE 
(
Foo int,
Bar int
);
GO


DECLARE @T AS MyTable;

INSERT INTO @T VALUES (1,2), (2,3)

SELECT *,
sys.fn_PhysLocFormatter(%%physloc%%) AS [physloc]
FROM @T

EXEC sp_executesql
N'SELECT *,
sys.fn_PhysLocFormatter(%%physloc%%) AS [physloc]
FROM @T',
N'@T MyTable READONLY',
@T=@T

包含 physloc 列只是为了证明子作用域中引用的表变量绝对与外部作用域相同,而不是副本。

关于sql - 如何在动态sql语句中使用表变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4626292/

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