如何使用动态生成的列名更新本地表变量?

时间:2016-03-24 13:15:12

标签: sql-server tsql dynamic-sql

我有一些汇总数据:

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表不存在的会话。

我该如何解决它?

1 个答案:

答案 0 :(得分:0)

您可以尝试使用全局临时表,如下面的代码所示:

CREATE TABLE ##globalSession ( column1 int null, column2 varchar(45) null);

INSERT INTO ##globalSession (column1, column2) Values (2, 'initial data');

declare @sql VARCHAR(255) = 'UPDATE ##globalSession set column1 = 1, column2 = ''test'' ; ';

exec (@sql)

SELECT * FROM ##globalSession

DROP TABLE ##globalSession;