sql >> Base de Datos >  >> RDS >> Sqlserver

¿Cómo almacena datos estáticos en su proyecto de base de datos de SQL Server en VS 2012?

Puede utilizar este enfoque:

  • Coloque sus datos de referencia en archivos XML, uno por tabla
  • Agregue archivos XML con datos de referencia a su proyecto de base de datos
  • Utilice un script posterior a la implementación para extraer los datos de XML y fusionarlos en sus tablas

Aquí hay una descripción más detallada de cada paso, ilustrada con un ejemplo. Digamos que necesita inicializar una tabla de países que tiene esta estructura:

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

Crea una nueva carpeta llamada ReferenceData bajo su proyecto de base de datos. Debe ser una carpeta hermana de Schema Objects y Scripts .

Agrega un nuevo archivo XML llamado Country.xml a los ReferenceData carpeta. Complete el archivo de la siguiente manera:

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

Encuentra Script.PostDeployment.sql y añádele el siguiente código:

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

Probé esta solución solo en VS 2008, pero debería ser independiente de su entorno de desarrollo.