Existe o conceito de um "arquivo de inclusão" no SQL Server?

19

Eu tenho um conjunto de scripts que precisam ser executados em uma determinada ordem. Eu gostaria de criar um "arquivo mestre" que lista todos os outros arquivos e sua ordem correta. Basicamente, como um arquivo de inclusão de C ++ ou ASP / VBScript.

Jonathan Allen
fonte

Respostas:

19

Se você estiver usando SQLCMD , poderá :r FileNameincluir um arquivo .sql separado.

: r FileName

Analisa instruções T-SQL adicionais e comandos SQLCMD do arquivo especificado por FileName no cache da instrução. FileName é lido em relação ao diretório de inicialização do Visual Studio. O arquivo é lido e executado depois que um terminador em lote é encontrado. Você pode emitir vários comandos: r. O arquivo pode incluir qualquer comando SQLCMD, incluindo o terminador em lote definido em Ferramentas, Opções. Você pode usar: r em um script de pré-implantação ou pós-implantação para incluir outros scripts.

Michael Fredrickson
fonte
Você está usando esse recurso você mesmo?
22222 bernd_k
Estou usando muito isso em projetos do SQL Server Data Tools. Realmente ajuda quando estou tentando organizar os dados de amostra que são executados como um script posterior.
Jonathan Allen
4

No sentido dos pré-processadores C antigos, definitivamente não

  • O T-SQL por si só não tem esse conceito
  • sqlcmd e sqlcmdmode do SSMS não manipulam caminhos de arquivo relativos
  • sqlcmd e sqlcmdmode do SSMS não suportam condições condicionais, incluindo

Se você tiver um conjunto de arquivos com determinados caminhos absolutos, que deseja incluir em uma ordem incondicional, poderá usar a ferramenta de linha de comando sqlcmd ou o SSMS no sqlcmdmode, conforme mencionado por @mfredrickson e @Marian.


Mas se você quiser caminhos relativos ou inclusões condicionais, precisará usar algum wrapper chamando sqlcmd (ou um de seus predecessores obsoletos, isql ou osql).

Atualmente no meu trabalho nessa situação, estou revisando e estendendo o código vbs e hta antigo. Não estou completamente feliz, mas é uma decisão pragmática. Está funcionando e o usuário final está em casa com a GUI hta e nenhuma instalação de software adicional é necessária.

Para um design novo, eu começaria a pensar em usar o WPF e o PowerShell para agrupar chamadas do sqlcmd, mas com nossos clientes atuais não posso presumir a presença do PowerShell V2.

Mesmo em épocas anteriores, escrevíamos lotes simples de cmd para esse fim, alguns deles ainda em uso.

Acho que existem ferramentas atuais, especialmente aquelas direcionadas a fluxos de trabalho, que podem ser adequadas aqui. Eu não estou familiarizado com isso.

bernd_k
fonte
3

Juntamente com o modo SQLCMD no Management Studio, você também pode usar um arquivo em lotes para usá-lo como arquivo mestre para organizar e chamar todos os seus arquivos sql usando o utilitário SQLCMD .

O modo SQLCMD é uma simulação do uso do utilitário dentro do Management Studio, portanto, não há grande diferença entre os modos. Exceto que em algum momento eu prefiro executar lotes (não há mais abertura do M Studio ... carregando o db correto ... etc). Eu prefiro configurar tudo no lote, incluindo arquivos de saída.

Marian
fonte
2

Eu concordo, um pré-processador T-SQL é extremamente necessário. Eu desenvolvi o meu próprio em C #, o que me levou uma hora. Além de controlar a ordem de execução dos scripts SQL, também me permite ter macros que se parecem com UDFs escalares e são fáceis de usar, mas executam tão rápido quanto UDFs embutidos.

AK
fonte
+1 - Eu já fiz esse tipo de coisa com ferramentas de modelo em várias ocasiões. Embora o sqlcmd tenha algumas facilidades para substituição de variáveis, eu daria a alguém que implementasse um plug-in decente de pré-processador de macro para SSMS um grande beijo no fundo.
ConcernedOfTunbridgeWells
11
@AK, você se importaria de elaborar isso um pouco mais? Talvez poste algum código no github?
Craig
2

Eu gosto da resposta de bernd_k . Dependendo de como você nomeou seus scripts, como incluir um número, o SQL Server PowerShell (SQLPS) pode ser usado se você estiver executando o SQL Server 2008 ou superior. Mesmo se você estivesse usando o SQL 2005, poderia utilizar o PowerShell e o SMO para 2005.

Nota lateral: acredito que o SQLCMD acabará por ser colocado na lista depreciada e está sendo substituído pelo SQLPS, PowerShell.

Existem algumas outras opções também.

  1. Configure cada script como uma etapa em um trabalho do SQL Agent. Você pode definir a ordem em que são executados.
  2. Crie um pacote SSIS para chamar cada arquivo. Isso pode oferecer um pouco mais de controle e um pouco mais de opções de log. Eu gosto desse método se o resultado de um script precisar ser verificado antes da execução do próximo.
Shawn Melton
fonte
Não acho que o SQLCMD seja depreciado porque é muito importante o funcionamento do SQL Server Data Tools e DACPACs.
Jonathan Allen
@ JonathanAllen Se você encontrar alguma documentação atual que mostre o gerenciamento de DACPACs, SQLCMDavise-me, porque a maior parte do que acho é referente ao PowerShell . Também não vejo a referência onde sqlcmdé usada com o SSDT, exceto talvez para a comparação de esquema, mas nunca uso os scripts gerados.
amigos estão dizendo sobre shawn
Os scripts SSDT são scripts sqlcmd. É assim que ele lida com parâmetros, definidos pelo usuário e coisas como o nome do banco de dados. Se você deseja implantar o DACPAC usando SqlPackage.exe, este link mostra como passar os parâmetros sqlcmd. msdn.microsoft.com/en-us/…
Jonathan Allen