嵌套 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
我有以下设置
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