Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment stocker des données statiques dans votre projet de base de données SQL Server dans VS 2012

Vous pouvez utiliser cette approche :

  • Placez vos données de référence dans des fichiers XML, un par table
  • Ajouter des fichiers XML avec des données de référence à votre projet de base de données
  • Utilisez un script de post-déploiement pour extraire les données du XML et les fusionner dans vos tables

Voici une description plus détaillée de chaque étape, illustrée par un exemple. Supposons que vous deviez initialiser une table de pays ayant cette structure :

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

Créez un nouveau dossier appelé ReferenceData sous votre projet de base de données. Il doit s'agir d'un dossier frère des Schema Objects et Scripts .

Ajoutez un nouveau fichier XML appelé Country.xml à la ReferenceData dossier. Remplissez le fichier comme suit :

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

Trouvez Script.PostDeployment.sql , et ajoutez-y le code suivant :

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

J'ai essayé cette solution uniquement dans VS 2008, mais elle devrait être indépendante de votre environnement de développement.