Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie speichern Sie statische Daten in Ihrem SQL Server-Datenbankprojekt in VS 2012

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.