我需要根據Person和語言插入一些數據庫關聯(MS-SQL Server 2008中的多對多表)。我的傳入數據包括一張滿是人的表格,一張充滿語言的表格,並且人們有一個代表與其關聯的每種語言的逗號分隔語言的字段。在SQL中使用逗號分隔列表創建關聯
因此,這裏的表是什麼樣子
人民
-----------------------------------------------
ID | First Name | Last Name | Languages
-----------------------------------------------
1 | Paul | Johnson | English,Spanish
2 | Jack | Johnson | English,Hindi
3 | Mark | Johnson | NULL
-----------------------------------------------
語言
--------------
ID | Name
--------------
1 | English
2 | Spanish
3 | Hindi
--------------
,我需要把它變成一個表,這將在完成後,如下所示:
PeopleLanguage
----------------------
PeopleID | LanguageID
----------------------
1 | 1
1 | 2
2 | 1
2 | 3
現在,我喜歡向避免使用遊標或while循環,以在每個迭代的醫生,並進行操作,但我不能說的外面想辦法(另外,我不完全理解遊標:p)
希望SO能夠爲我提出一個很好的解決方案。
謝謝!
這似乎工作正常(我沒有測試過實際的插入,但我有選擇顯示正確的數據)!但是,請注意,不是使用charindex,而是使用IN和一個自定義表值函數來分割逗號,如下所示:... JOIN語言ON Language.Name IN(SELECT DISTINCT [items] AS [LanguageName] FROM [BigSplit](People.Languages,',')) –
[This fiddle](http://sqlfiddle.com/#!3/172c2/1)顯示了這個簡單的charindex檢查可以如何中斷。 –
@Paul你可能應該發表你的答案(包括BigSplit的定義)作爲答案,並接受這一點,尤其是如果這就是你的選擇。目前這個答案不是一個非常安全的解決方案。 –