sql >> Databasteknik >  >> RDS >> Sqlserver

Hur lagrar du statisk data i ditt SQL Server-databasprojekt i VS 2012

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ö.




  1. Hur man tar bort mellanslag från en sträng i MySQL

  2. 2 funktioner som returnerar sekunderna från ett Datetime-värde i Oracle

  3. SSIS. Hur kopierar man data från en tabell till olika tabeller?

  4. Hur kan jag kontrollera att inlämningsdatumet ligger mellan två datum i databasen?