Ответ 1
Вы можете использовать этот подход:
- Поместите свои ссылочные данные в файлы XML, по одному на таблицу
- Добавить XML файлы со справочными данными в проект базы данных
- Использовать Post-Deployment script для извлечения данных из XML и объединения их в ваши таблицы
Ниже приведено более подробное описание каждого шага, иллюстрируемого примером. Скажем, что вам нужно инициализировать таблицу стран, которая имеет эту структуру:
create table Country (
CountryId uniqueidentifier NOT NULL,
CountryCode varchar(2) NOT NULL,
CountryName varchar(254) NOT NULL
)
Создайте новую папку под названием ReferenceData
в рамках проекта базы данных. Это должна быть папка для сестер Schema Objects
и Scripts
.
Добавьте новый XML файл с именем Country.xml
в папку ReferenceData
. Заполните файл следующим образом:
<countries>
<country CountryCode="CA" CountryName="Canada"/>
<country CountryCode="MX" CountryName="Mexico"/>
<country CountryCode="US" CountryName="United States of America"/>
</countries>
Найдите Script.PostDeployment.sql
и добавьте к нему следующий код:
DECLARE @h_Country int
DECLARE @xmlCountry xml = N'
:r ..\..\ReferenceData\Country.xml
'
EXEC sp_xml_preparedocument @h_Country OUTPUT, @xmlCountry
MERGE Country AS target USING (
SELECT c.CountryCode, c.CountryName
FROM OPENXML(@h_Country, '/countries/country', 1)
WITH (CountryCode varchar(2), CountryName varchar(254)) as c) AS source (CountryCode, CountryName)
ON (source.CountryCode = target.CountryCode)
WHEN MATCHED THEN
UPDATE SET CountryName = source.CountryName
WHEN NOT MATCHED BY TARGET THEN
INSERT (CountryId, CountryCode, CountryName) values (newid(), source.CountryCode, source.CountryName)
;
Я пробовал это решение только в VS 2008, но он должен быть агностическим для вашей среды разработки.