嵌套 SQL 与更新语句的合并数据部分

Nested SQL with Coalesced data part of an update statement

我有以下设置

create table #work
(
customer_no int,
attended_conf varchar(100) -- ADDED LR 6/16/15
)

#work table 已填充 - 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  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 而不是简单的 select。我不能只做一个 select。其他门票似乎显示 select 声明,我可以得到 select OK - 但我的问题是更新。

您可以使用 FOR XML 来连接

update  x       
set     attended_conf = (select e.key_value + '; ' as "text()"
                         from TX_CUST_KEYWORD e
                         where e.customer_no = x.customer_no
                         and   e.keyword_no = 704
                         order by e.key_value
                         for xml path(''))
from    #work x