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.