Du kan använda detta tillvägagångssätt:
- Lägg in dina referensdata i XML-filer, en per tabell
- Lägg till XML-filer med referensdata till ditt databasprojekt
- Använd ett efterinstallationsskript för att extrahera data från XML och slå samman dem i dina tabeller
Här är en mer detaljerad beskrivning av varje steg, illustrerad med ett exempel. Låt oss säga att du måste initiera en tabell över länder som har denna struktur:
create table Country (
CountryId uniqueidentifier NOT NULL,
CountryCode varchar(2) NOT NULL,
CountryName varchar(254) NOT NULL
)
Skapa en ny mapp som heter ReferenceData
under ditt databasprojekt. Det bör vara en syskonmapp till Schema Objects
och Scripts
.
Lägg till en ny XML-fil som heter Country.xml
till ReferenceData
mapp. Fyll i filen enligt följande:
<countries>
<country CountryCode="CA" CountryName="Canada"/>
<country CountryCode="MX" CountryName="Mexico"/>
<country CountryCode="US" CountryName="United States of America"/>
</countries>
Hitta Script.PostDeployment.sql
, och lägg till följande kod till den:
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)
;
Jag provade den här lösningen endast i VS 2008, men den borde vara agnostisk för din utvecklingsmiljö.