【发布时间】:2016-03-24 21:43:37
【问题描述】:
我有一些汇总数据:
name asd colA ColB ColC X Y
-----------------------------------------------
...
George PJ Sp P B 14.8 56
George PJ Sp P C 11.4 43
...
-----------------------------------------------
还有一个本地结果表
declare @result table(
Name nvarchar(255),
SP_E_A int null,
SP_E_B int null,
SP_E_C int null,
SP_E_D int null,
SP_E_viso decimal(5,1) null,
...
--LOTS MORE COLUMN GOES AFTER
...
)
它有 很多 列
我想要做的是:
动态生成更新语句并执行
示例:
UPDATE TABLE @table SET SP_P_B = 56
所以我写了这个
open cursor for *that result set*
declare @sql varchar(255) = 'UPDATE @table SET '+@colA+'_'+@colB+'_'+@colC+'='+CONVERT(varchar,@Y);
exec (@sql)
我得到的错误
必须声明表变量“@table”。
看起来 exec 启动了另一个不存在 @result 表的会话。
我该如何解决?
【问题讨论】:
-
改用临时表就行了。
-
将表变量传入/传出动态 SQL 语句可能很棘手。这里的问题是动态 SQL 在不同的上下文中执行。这个question 展示了如何解决这个问题。
-
本地临时表
#temp将完成这项工作 -
您创建了
#table吗?将您的declare @table行更改为create table #table -
您可以发布您的查询吗?
标签: sql-server tsql dynamic-sql