Eu tenho um arquivo SQL simples que estou usando para realizar alguns testes:
DECLARE @VAR1 AS VARCHAR(100) = '12345'
DECLARE @VAR2 AS INTEGER = 54321
WAITFOR DELAY '00:00:02'
INSERT Orders SELECT @VAR1 AS COL1, @VAR2 AS COL2, ...
...
Antes de lançar tudo isso, gostaria de fazer uma limpeza:
/* Clean SpecialSubSubEntries */
DELETE SpecialSubSubEntries
WHERE Id IN (SELECT Id FROM SubSubEntries
WHERE SubEntryId IN (SELECT Id FROM SubEntries
WHERE EntryId IN (SELECT Id FROM Entries
WHERE Name='ENTRY01')
)
)
DELETE SubSubEntries
WHERE SubEntryId IN (SELECT Id FROM SubEntries
WHERE EntryId IN (SELECT Id FROM Entries
WHERE Name='ENTRY01')
)
...
Por motivos de legibilidade, gostaria de colocar todos os comandos de limpeza em um arquivo "cleanup.sql" e iniciá-lo no início do meu arquivo SQL. Como faço algo assim?
Acho que é algo como:
EXECUTE ".\cleanup.sql"
... mas não tenho certeza sobre a sintaxe.
Você pode executar o SQLCMD de dentro do T-SQL/SSMS. Veja as respostas aqui: Como posso executar um conjunto de arquivos .SQL de dentro do SSMS?
Você precisa definir a janela de consulta para o modo SQLCMD. Isso é um requisito, é a ferramenta cliente que faz o trabalho para você, não o mecanismo de banco de dados. Para habilitar este modo, clique em Consulta na barra de menu e selecione Modo SQLCMD.
Para uma solução T-SQL pura, acabei de testar o código abaixo e funciona como um encanto:
Uma observação importante: não é recomendado usar essa abordagem a menos que você esteja ciente dos riscos por trás dela. O script é desabilitado
xp_cmdshell
após a execução, como a Microsoft recomenda .Em geral, ler um
.sql
arquivo do disco rígido dentro de outro.sql
arquivo é um antipadrão. Em vez disso, é melhor criar um procedimento armazenado :Depois disso, você pode executá-lo em um local arbitrário no sql quando assim:
--
Se ainda precisar, é mais correto fazer assim:
--
Observação
A Microsoft não recomenda usar o
xp_cmdshell
procedimento. Isso não é seguro.