Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como você armazena dados estáticos em seu projeto de banco de dados SQL Server no VS 2012


Você pode usar esta abordagem:
  • Coloque seus dados de referência em arquivos XML, um por tabela
  • Adicione arquivos XML com dados de referência ao seu projeto de banco de dados
  • Use um script de pós-implantação para extrair os dados do XML e mesclá-los em suas tabelas

Aqui está uma descrição mais detalhada de cada etapa, ilustrada com um exemplo. Digamos que você precise inicializar uma tabela de países que tenha essa estrutura:
create table Country (
    CountryId uniqueidentifier NOT NULL,
    CountryCode varchar(2) NOT NULL,
    CountryName varchar(254) NOT NULL
)

Crie uma nova pasta chamada ReferenceData em seu projeto de banco de dados. Deve ser uma pasta irmã dos Schema Objects e Scripts .

Adicione um novo arquivo XML chamado Country.xml para o ReferenceData pasta. Preencha o arquivo da seguinte forma:
<countries>
    <country CountryCode="CA" CountryName="Canada"/>
    <country CountryCode="MX" CountryName="Mexico"/>
    <country CountryCode="US" CountryName="United States of America"/>
</countries>

Encontre Script.PostDeployment.sql , e adicione o seguinte código a ele:
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)
;

Eu tentei esta solução apenas no VS 2008, mas deve ser agnóstica ao seu ambiente de desenvolvimento.