如何使用 [column name] 作为另一个表中的值更新一个表中的列

问题描述 投票:0回答:0

我被要求更新的应用程序使用少量表格生成报告。

Table1 将 id 和对字段的引用保存到另一个具有配置项的表。

Table2 是配置表,用于保存对报告的引用,这些报告的值在动态添加的列中,如 usercol1、usercol2...usercol55。

我不知道如何使用 [column name] 作为值来更新 tempname。我在下面编写了 DDL,但是 UPDATE 查询不起作用,因为 a.colnum 未被识别为列。

我需要的报告是这样的:

1   bob
2   john
3   jack
4   ben

如果我将 UPDATE 编写为带有连接

a.usercol + cast(a.colnum as varchar(2))
的常规内联查询,我得到的结果是:

1   usercol32
2   usercol2
3   usercol7
4   usercol7

所以,我想我需要像下面的 DDL 一样将 UPDATE 查询编写为动态 sql。正如预期的那样,它正在产生错误

消息 4104,级别 16,状态 1,第 25 行
无法绑定多部分标识符“a.colnum”。

我可以写一个带有附加表的循环,将 [colnum] 的内容转储到变量中并用该变量更新列......有没有办法在没有循环的情况下编写这个查询。

这是DDL:

create table #Table1 (id int, colnum int)
create table #Table2 (id int, usercol1 varchar(20), usercol2 varchar(20), usercol3 varchar(20), usercol7 varchar(20), usercol32 varchar(20))

insert into #Table1(id, colnum) values(1, 32);
insert into #Table1(id, colnum) values(2, 2);
insert into #Table1(id, colnum) values(3, 7);
insert into #Table1(id, colnum) values(4, 7);

insert into #Table2(id, usercol32) values(1, 'bob');
insert into #Table2(id, usercol2) values(2, 'john');
insert into #Table2(id, usercol7) values(3, 'jack');
insert into #Table2(id, usercol7) values(4, 'ben');

CREATE TABLE #Temp    
(    
 tempid int,
 tempname varchar(20) 
)

insert into #Temp (tempid)
select id from #Table1

declare @sql varchar(max)
set @sql = 'update #Temp'
            + ' set tempname = a.usercol' + cast(a.colnum as varchar(2))
            + ' from #table1 a'
            + ' join #table2 b on a.id = b.id'
            + ' where #Temp.tempid = a.id'

exec (@sql)
select * from #Temp

drop table #Temp
drop table #Table1
drop table #Table2
sql sql-server dynamic-sql
© www.soinside.com 2019 - 2024. All rights reserved.