19

Sto cercando di utilizzare il progetto di database di SQL Server per conservare tutte le nostre tabelle, stored procedure, script di visualizzazioni ecc. Ora ho un modo per essere in grado di mantenere tutti i nostri dati di riferimento (o statici). Quando lo strumento o il progetto viene eseguito, installerà tutti gli oggetti DB e inserirà tutti i dati di riferimento.Come archiviare i dati statici nel progetto di database di SQL Server in VS 2012

Ho trovato articoli simili per il 2010 ma usavano cose come Team Edition per i professionisti del database.

  • Ottieni il nostro DB sotto il controllo del codice sorgente.
  • Sincronizza il nostro DB di sviluppo locale con l'ultima versione nel controllo del codice sorgente.
  • Lavoro con Visual Studio 2012 e SQL Server 2012
  • Utilizzare gli strumenti .NET il più lontano possibile e non qualcosa come Redgate (Redgate è ottimo ma non voglio uscirne solo se posso usare gli strumenti in VS 2012)
+0

Perché non utilizzare prima il codice di Entity Framework? È possibile utilizzarlo per modellare tutte le tabelle/relazioni del database utilizzando le classi POCO + DataAnnotations o Fluent API. Quindi EF Migrations può gestire il controllo della versione DB e/o seminare i dati di riferimento. – Kittoes0124

risposta

22

È possibile utilizzare questo approccio:

  • Mettete i vostri dati di riferimento in file XML, uno per ogni tavolo
  • Aggiungere file XML con i dati di riferimento al progetto di database
  • Utilizzare uno script dopo l'implementazione per estrarre i dati da XML e si fondono in tabelle

Ecco una descrizione più dettagliata di ogni passo, illustrato con un esempio. Diciamo che è necessario 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 
) 

Creare una nuova cartella denominata ReferenceData sotto il vostro progetto di database. Dovrebbe essere una cartella di pari livello di Schema Objects e Scripts.

Aggiungere un nuovo file XML denominato Country.xml alla cartella ReferenceData. Popolare 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 aggiungere il seguente codice a esso:

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 agnostico al vostro ambiente di sviluppo.

+0

Dato che sei l'unico a fare volontariato, potresti avere una certa reputazione. :) – uriDium