Sie können diesen Ansatz verwenden:
- Schreiben Sie Ihre Referenzdaten in XML-Dateien, eine pro Tabelle
- XML-Dateien mit Referenzdaten zu Ihrem Datenbankprojekt hinzufügen
- Verwenden Sie ein Post-Deployment-Skript, um die Daten aus XML zu extrahieren und in Ihren Tabellen zusammenzuführen
Hier ist eine detailliertere Beschreibung der einzelnen Schritte, illustriert mit einem Beispiel. Angenommen, Sie müssen eine Ländertabelle mit dieser Struktur initialisieren:
create table Country (
CountryId uniqueidentifier NOT NULL,
CountryCode varchar(2) NOT NULL,
CountryName varchar(254) NOT NULL
)
Erstellen Sie einen neuen Ordner namens ReferenceData
unter Ihrem Datenbankprojekt. Es sollte ein gleichgeordneter Ordner der Schema Objects
sein und Scripts
.
Fügen Sie eine neue XML-Datei namens Country.xml
hinzu zu den ReferenceData
Mappe. Füllen Sie die Datei wie folgt:
<countries>
<country CountryCode="CA" CountryName="Canada"/>
<country CountryCode="MX" CountryName="Mexico"/>
<country CountryCode="US" CountryName="United States of America"/>
</countries>
Suchen Sie Script.PostDeployment.sql
, und fügen Sie den folgenden Code hinzu:
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)
;
Ich habe diese Lösung nur in VS 2008 ausprobiert, aber sie sollte unabhängig von Ihrer Entwicklungsumgebung sein.