カンマ区切りの文字列のようなもので更新する必要がある一時テーブル変数があります。
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
私が見つけた最も近いものはこれでした: 複数の行を連結する方法は? しかし、正解としてマークされているものを見て、彼がどのように「1、2、3」を取得しているのか理解できません。
SQL Server 2008 R2 64を使用しています。カーソルを使用してみましたが、速度が遅くなりました(この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
エラーは発生しませんでしたが、結果が非常に不安定であるため、ここでそれを表示するための適切な方法を見つけることができません。
たとえば、クライアント3の趣味リストは次のようになります。
;4 ;;5 ;;7
ALMOSTは機能します。スペースがどこから来ているのかわからない。
編集2。
ええと。キャストを使用しています。私は物事をトリミングする必要があります。このソリューションは、私のサーバーで機能します。ClearLogicも機能するかどうかを確認するので、正解としてマークを付けることができます。