我有一個臨時表變量,需要使用某種類似逗號分隔字符串的方式進行更新。使用更新語句連接多行
declare @clients table (clientid int, hobbylist char(1000))
declare @hobbies table (clientid int, hobbynumber smallint)
insert into @clients values (3, '')
insert into @clients values (5, '')
insert into @clients values (12, '')
insert into @hobbies values (3, 4)
insert into @hobbies values (3, 5)
insert into @hobbies values (3, 7)
insert into @hobbies values (12, 3)
insert into @hobbies values (12, 7)
所以@clients包含:
clientid hobbylist
---------------------------
3
5
12
而且@hobbies包含:
clientid hobbylist
---------------------------
3 4
3 5
3 7
12 3
12 7
我需要更新@clients表,以便它包含:
clientid hobbylist
---------------------------
3 4;;5;;7
5
12 3;;7
我發現的最接近的是: How to concatenate multiple rows? 但我不明白他是如何得到「一,二,三」看什麼被標記爲正確的答案。我試過使用遊標,但它很慢(並且在這個sp中將會有噸這種類型的東西)。
什麼是最有效的方法呢?
編輯:
從NJK的建議下,我嘗試這樣做:
update c
set hobbylist=Stuff((
Select ';;' + cast(hobbynumber as char)
From @hobbies h
Where h.clientid = c.clientid
For XML Path('')
), 1, 1, '')
from @clients c
它沒有給我一個錯誤,但結果卻是如此wacked,我無法找到一個好辦法在這裏展示。
例如客戶端3的愛好列表如下所示:
;4 ;;5 ;;7
幾乎可以工作。不知道空間來自哪裏。
編輯2.
Duh。我正在使用演員。我需要修剪這個東西。這個解決方案適用於我的服務器。我將看看我是否也可以使ClearLogic的工作,所以我可以將其標記爲正確的答案。
重複[SQL服務器?我可以用逗號分隔多行合併到一列(http://stackoverflow.com/questions/ 2046037/sql-server-can-i-comma-delimit-multiple-rows-into-one-column) – Kermit
現在檢查出來,njk! (如果這是解決方案,你是我的英雄。) – Julie
你只需要用雙分號替換逗號即可。 – Kermit