我有以下设置
create table #work
(
customer_no int,
attended_conf varchar(100) -- ADDED LR 6/16/15
)
#work表被填充 - customer_no被填充,attend_conf为空,直到更新的语句。
我想要做的是使用连接字符串更新attended_conf
字段。 (代码应该获取给定keyword_no的所有key_values并连接它们。这段代码有效:
declare @const_str varchar(255)
select @const_str = ''
SELECT @const_str = @const_str + COALESCE(e.key_value + '; ', '')
from TX_CUST_KEYWORD e
join T_CUSTOMER s on e.customer_no=s.customer_no
where e.customer_no = 86038213
and keyword_no = 704
select @const_str
一行的输出看起来像这样:
(No column name)
2003-2004; 2007-2008; 2014-2015; 2017-2018;
但是,当我尝试使用update语句进行整合时。 我的初始更新声明(需要更改)。
update x
set attended_conference = @const_str
from #work x
join TX_CUST_KEYWORD p on x.customer_no = p.customer_no
where keyword_no = 704
做这样的事......
update x
set attended_conference = @const_str
from #work x
join (select @const_str = @const_str + COALESCE(e.key_value + '; ', ''),
s.customer_no
from TX_CUST_KEYWORD e
join T_CUSTOMER s on e.customer_no=s.customer_no
where keyword_no = 704) as a
where x.customer_no = a.customer_no
不起作用。
我的问题与其他问题不同,因为我需要在更新语句中进行COALESCE / concatenate而不是简单的选择。我不能做一个选择。其他票证似乎显示一个选择语句,我可以选择确定 - 但我的问题是更新。
答案 0 :(得分:0)
您可以使用FOR XML连接


 更新x
设置attend_conf =(选择e.key_value +';'as“text( )“
来自TX_CUST_KEYWORD e
其中e.customer_no = x.customer_no
和e.keyword_no = 704
按e.key_value排序
用于xml路径(''))&# xA;来自#work x