Мне нужно вставить некоторые ассоциации баз данных (таблица Many-to-Many в MS-SQL Server 2008) на основе Person и языка. Мои входящие данные включают таблицу, полную людей, таблицу с полными языками, а у людей есть поле с разделителями-запятыми, которые представляют собой каждый язык, с которым они связаны.Создание ассоциаций из списка с разделителями-запятыми в 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
Теперь, я бы как, чтобы избежать использования курсоров или во время циклов итерации по каждому врачу и выполнять операцию, но я не могу придумать, как за пределами этого (также, я не полностью понимаю курсоры: p)
Надеюсь, что SO сможет придумать хорошее решение для меня.
Спасибо!
Это, кажется, работает правильно (я не тестировал фактическую вставку, но у меня есть выбор, показывающий правильные данные)! Обратите внимание, однако, вместо использования charindex я использовал функцию IN и пользовательскую функцию табличной оценки для разделения на запятую, которая выглядит примерно так: ... JOIN Языки ON Languages.Name IN (SELECT DISTINCT [items] AS [LanguageName] FROM [BigSplit] (People.Languages, ',')) –
[Эта скрипка] (http://sqlfiddle.com/#!3/172c2/1) показывает, как эта простая проверка charindex может сломаться. –
@Paul, вы должны, вероятно, опубликовать ответ, который вы отправили (включая определение BigSplit), в качестве ответа, и принять это, особенно если это то, с чем вы пошли. В настоящее время этот ответ не является очень безопасным решением. –