0
我可以使用遊標執行此操作,但我儘可能地避免使用遊標。這是一個有點示例代碼,我已經有了打算:SQL:使用三個分隔符解析關聯輸入字符串
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
輸入字符串可以有任意數量的「人員」,每個人可以有任意數量的「項目」。
fn_ParseDelimitedStrings是一個自定義函數,我們可以爲每個分隔項返回一個索引 - 值對的表。即:
RowID Value
-------------
1 item1
2 item2
3 item3
4 etc
我無法從最終的拆分每一個「項目」關聯到「人」,他們應當用有關。
有沒有什麼可以做,或者我將不得不使用遊標?
退房這個職位。 。 。 http://stackoverflow.com/questions/697519/split-function-equivalent-in-tsql。如果你關心表現,看看Aaron Bertrand的話。 – 2012-08-08 17:36:29