można użyć tej metody:
- Umieść swoje dane referencyjne w plikach XML, jeden na stole
- Dodaj pliki XML z danymi odniesienia do projektu bazy
- Zastosowanie skrypt post-Deployment aby wyodrębnić dane z XML i scalić je w tabelach
Oto bardziej szczegółowy opis każdego kroku, zilustrowana na przykładzie. Powiedzmy, że trzeba zainicjować tablicę krajów, które ma taką strukturę:
create table Country (
CountryId uniqueidentifier NOT NULL,
CountryCode varchar(2) NOT NULL,
CountryName varchar(254) NOT NULL
)
Utwórz nowy folder o nazwie ReferenceData
pod projektem bazy danych. Powinien to być folder rodzeństwa z Schema Objects
i Scripts
.
Dodaj nowy plik XML o nazwie Country.xml
do folderu ReferenceData
. Wypełnianie plik następująco:
<countries>
<country CountryCode="CA" CountryName="Canada"/>
<country CountryCode="MX" CountryName="Mexico"/>
<country CountryCode="US" CountryName="United States of America"/>
</countries>
Znajdź Script.PostDeployment.sql
i dodaj następujący kod do niego:
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)
;
próbowałem tego rozwiązania jedynie w VS 2008, ale powinien być agnostykiem do środowiska programistycznego.
Dlaczego nie używać Entity Framework Code First? Możesz go użyć do modelowania wszystkich tabel/relacji bazy danych za pomocą klas POCO + DataAnnotations lub Fluent API. Następnie Migracje EF mogą obsługiwać kontrolę wersji DB i/lub wysyłać dane referencyjne. – Kittoes0124