Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come archiviare i dati statici nel progetto di database di SQL Server in VS 2012

Puoi usare questo approccio:

  • Inserisci i tuoi dati di riferimento in file XML, uno per tabella
  • Aggiungi file XML con dati di riferimento al tuo progetto di database
  • Utilizza uno script post-distribuzione per estrarre i dati da XML e unirli alle tue tabelle

Ecco una descrizione più dettagliata di ogni passaggio, illustrata con un esempio. Diciamo che devi inizializzare una tabella di paesi che ha questa struttura:

create table Country (
    CountryId uniqueidentifier NOT NULL,
    CountryCode varchar(2) NOT NULL,
    CountryName varchar(254) NOT NULL
)

Crea una nuova cartella chiamata ReferenceData sotto il tuo progetto di database. Dovrebbe essere una cartella di pari livello degli Schema Objects e Scripts .

Aggiungi un nuovo file XML chiamato Country.xml al ReferenceData cartella. Compila il file come segue:

<countries>
    <country CountryCode="CA" CountryName="Canada"/>
    <country CountryCode="MX" CountryName="Mexico"/>
    <country CountryCode="US" CountryName="United States of America"/>
</countries>

Trova Script.PostDeployment.sql e aggiungi il codice seguente:

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)
;

Ho provato questa soluzione solo in VS 2008, ma dovrebbe essere indipendente dal tuo ambiente di sviluppo.