Excluindo uma tabela específica de uma implantação SSDT

11

Eu tenho um banco de dados existente com tudo no esquema dbo. Eu tenho um projeto SSDT com objetos que estou adicionando a ele com esquemafoo

Eu tenho uma tabela que se parece com isso no projeto:

CREATE table foo.a (
    id INT NOT NULL
        CONSTRAINT [PK_foo_a] PRIMARY KEY CLUSTERED
        CONSTRAINT [FK_foo_a] FOREIGN KEY REFERENCES [dbo].[a],
    desc NVARCHAR(50) NOT NULL
)

Depende do dbo.a. O dbo.a possui muitas colunas que são chaves estrangeiras para outras colunas. Outra pessoa (que mantém o esquema padrão) pode alterar o dbo.a.

Eu gostaria de armazenar simples dbo.a como:

CREATE table dbo.a (
    id INT NOT NULL
        CONSTRAINT [PK_a] PRIMARY KEY CLUSTERED
)

Portanto, ele é construído internamente, mas não implantado. Isso é possível?

Justin Dearing
fonte
Você não usa a comparação de esquema para suas implantações? Você pode simplesmente desmarcar essa tabela da lista quando forem detectadas alterações.
Dave
Estou fazendo uma comparação de esquema no momento, mas não do meu laptop para o servidor de desenvolvimento que eu gostaria de fazer uma implementação de publicação real.
Justin Dearing

Respostas:

11

Você pode usar o filtro de implantação AgileSqlClub SqlPackage .

Breves instruções reproduzidas do artigo original de Ed Elliott :

  1. Faça o download do filtro em agilesqlclub.codeplex.com
  2. Coloque DLLna mesma pasta quesqlpackage.exe
  3. Adicione estes parâmetros de linha de comando à sua implantação:

    /p:AdditionalDeploymentContributors=AgileSqlClub.DeploymentFilterContributor /p:AdditionalDeploymentContributorArguments="SqlPackageFilter=IgnoreSchema(BLAH)"

    Isso não implementará, descartará ou alterará nada no BLAHesquema.

Veja o artigo original para detalhes completos.

lucazav
fonte
Quando implanto a partir do devenv.exe pelos arquivos foo.publish.xml, ele não gera o sqlpackage.exe. Existe uma maneira de fazer isso?
Justin Dearing
O que eu faço nunca usa o devenv para implantar alterações. Em vez disso, construa o projeto e use um script para conduzir o sqlpackage.exe - dessa maneira, você pode fazer coisas como usar facilmente os contribuidores de implantação e também testar o mesmo script que você pode usar em outros ambientes. no seu processo ci!
Ed Elliott
Isso foi uma grande ajuda para mim, eu precisava implantar apenas um esquema específico. Nota para os outros no futuro, o método ignoreschema pode tomar em IgnoreSchema regex (^ (\ b (i) BLÁ \ b) *?!?.) Para ignorar tudo, mas o esquema BLÁ
andyb952
3

Somente o gerenciamento de parte de um banco de dados SSDTé difícil. Se não houvesse dependências, você poderia simplesmente impedir que ele soltasse objetos e não o incluísse no projeto. Como existem dependências, mas você não deseja gerenciá-las, acho que você precisará enganar o sistema.

Um método vem à mente: não tenho a capacidade de testá-los agora e só usei um método "semelhante" a esse, não exatamente esse.

Opção 1:

  1. Crie um novo projeto de banco de dados dbo.anele.

  2. Consulte a tabela com a nomeação em três partes. Para a primeira parte do nome, use uma variável SQLCMD. Por exemplo[$(DatabaseName)].dbo.a.

  3. Nunca implante seu foobanco de dados.

  4. Através dos arquivos de publicação ou da interface cli, $(DatabaseName)iguale o mesmo nome que seu banco de dados real.

SQL Hammer
fonte
Vai tentar isso
Justin Dearing
@JustinDearing Use o método do filtro implantação, é exatamente se adequa ao seu caso de uso (Ie Mantenha todas as tabelas no controle de origem e simplesmente ignorar alguns em implantação)
Ed Elliott
0

Uma maneira interna "limpa" de fazer isso (a partir de 2016) está usando um arquivo de comparação de esquema salvo. Você pode:

  1. Execute sua comparação de esquema (do seu projeto de banco de dados -> um servidor de destino) e desmarque todos os objetos que você deseja excluir para atualização.
  2. Salve sua comparação de esquema em um arquivo * .scmp
  3. Você pode copiar e colar o arquivo .scmp para criar versões para ambientes diferentes, se necessário, e simplesmente editar no editor XML para alterar a fonte (para apontar para criar o arquivo dacpac de saída), a conexão etc. ou até adicionar / modificar manualmente itens na seção .
  4. Configure os parâmetros de comando de implementação / publicação do dacpac para usar o arquivo .scmp apropriado para a publicação. por exemplo, SqlPackage.exe / Ação: publique /SourceFile:c:\project\schema_compare.scmp

Mais informações aqui: https://devblogs.microsoft.com/ssdt/schema-compare-in-sqlpackage-and-the-data-tier-application-framework-dacfx/

Jeremy H
fonte