このアプローチを使用できます:
- 参照データをテーブルごとに 1 つの XML ファイルに入れる
- 参照データを含む XML ファイルをデータベース プロジェクトに追加する
- 配置後スクリプトを使用して XML からデータを抽出し、テーブルにマージします
ここでは、例を示しながら、各ステップのより詳細な説明を示します。この構造を持つ国のテーブルを初期化する必要があるとしましょう:
create table Country (
CountryId uniqueidentifier NOT NULL,
CountryCode varchar(2) NOT NULL,
CountryName varchar(254) NOT NULL
)
ReferenceData
という新しいフォルダーを作成します。 データベース プロジェクトの下。 Schema Objects
の兄弟フォルダーである必要があります および Scripts
.
Country.xml
という新しい 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 でのみ試しましたが、開発環境にとらわれないはずです。