カーソルを使用してこれを行うことはできますが、可能な限り回避しようとしています。これが私が行っているサンプルコードのビットです:
declare @string varchar(max) = 'person1:item1~item2~item3~etc^person2:item1~item2~item3~etc'
declare @table1 table (id int, value varchar(500))
declare @table2 table (id varchar(50), value varchar(500))
declare @table3 table (id varchar(50), value varchar(50))
insert @table1 (id, value) select * from fn_ParseDelimitedStrings(@string, '^')
insert @table2 (id, value)
select
id = (select f.value from fn_ParseDelimitedStrings(t.value, ':') f where f.RowId=1),
value = (select f.value from fn_ParseDelimitedStrings(t.value, ':') f where f.RowId=2)
from @table1 t
select * from @table2
上記のコードは、次の形式でデータを提供します。
id value
-------------------------------
person1 item1~item2~item3~etc
person2 item1~item2~item3~etc
しかし、私はこの形式のデータが必要です:
id value
-------------------------------
person1 item1
person1 item2
person1 item3
person1 etc
person2 item1
person2 item2
person2 item3
person3 etc
入力文字列には任意の数の「persons」を含めることができ、各personには任意の数の「items」を含めることができます。
fn_ParseDelimitedStringsは、区切られた各項目のインデックスと値のペアのテーブルを返すカスタム関数です。すなわち:
RowID Value
-------------
1 item1
2 item2
3 item3
4 etc
最終分割からの各「アイテム」を、それらを関連付ける必要のある「人」に関連付けるのに問題があります。
できることはありますか、それともカーソルを使用する必要がありますか?