19

Próbuję użyć projektu bazy danych SQL Server, aby zachować całą naszą tabelę, procedurę składowaną, widoki itp. Mam teraz sposób na zachowanie wszystkich danych referencyjnych (lub statycznych). Kiedy narzędzie lub projekt zostanie uruchomiony, zainstaluje wszystkie obiekty DB i wstawi wszystkie dane referencyjne.Jak przechowywać statyczne dane w projekcie bazy danych SQL Server w VS 2012

Znalazłem podobne artykuły na rok 2010, ale używały takich rzeczy, jak Team Edition dla profesjonalistów baz danych.

  • Pobierz naszą bazę danych pod kontrolę źródła.
  • Zsynchronizuj naszą lokalną DB rozwoju z najnowszą wersją w kontroli źródła.
  • Praca z Visual Studio 2012 i SQL Server 2012
  • Używaj narzędzi .Net w miarę możliwości, a nie jak Redgate (Redgate jest świetne, ale nie chcę na razie tego zdobyć, jeśli mogę użyć narzędzi w VS 2012)
+0

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

Odpowiedz

22

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.

+0

Ponieważ jesteś jedyną osobą, która zgłasza się na ochotnika, możesz mieć jakąś reputację. :) – uriDium

Powiązane problemy