SSMS
 sql >> Base de Dados >  >> Database Tools >> SSMS

No SQL Server Management Studio, o que é o modo SQLCMD?


Eu fiz mais algumas pesquisas, então aqui está minha compreensão disso para estender o que foi escrito até agora:

O que é SQLCMD


SQLCMD.exe é um utilitário de console incluído na instalação do SQL Server 2005 e superior. Normalmente, você pode encontrá-lo em um caminho como c:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE .

É um ambiente de script simples que permite a automação de tarefas relacionadas ao SQL Server. Por exemplo, você pode escrever e executar um script que fará login em uma instância específica do SQL Server, executar scripts de um determinado diretório nessa conexão e armazenar a saída em um arquivo especificado.

Invoke-Sqlcmd O cmdlet foi introduzido com o SQL Server 2008 como um meio de substituir essa ferramenta por uma abordagem padronizada baseada em Powershell, preservando a maior parte da sintaxe e funcionalidade originais.

O que é o modo SQLCMD no SSMS


No SSMS, modo SQLCMD é um modo de execução de script que simula o ambiente sqlcmd.exe e, portanto, aceita alguns comandos que não fazem parte da linguagem T-SQL. Ao contrário de sqlcmd.exe , ele contata o banco de dados usando SqlClient (da mesma forma que SSMS), não ODBC provedor de dados, portanto, em alguns aspectos, pode ter um comportamento diferente do sqlcmd.exe .

A execução de scripts no modo SQLCMD permite usar comandos típicos de sqlcmd.exe meio Ambiente. No entanto, não há suporte para IntelliSense ou depuração para o modo SQLCMD, portanto, manter scripts que misturem T-SQL limpo com código específico do SQLCMD pode ser uma dor de cabeça. Portanto, deve ser usado apenas quando for necessário.

Exemplo de caso de uso


Vamos supor que uma empresa tenha uma convenção de nomenclatura para bancos de dados que incluam ambiente no nome, por exemplo:MyDb_Prod , MeuDb_Teste , MeuDb_Desenvolvimento . Esta convenção pode ser usada para minimizar a chance de erros .

Quando um desenvolvedor escreve um script T-SQL, ele terá que ser executado em diferentes ambientes no processo de implantação/teste, o que exigiria muitas versões do código:
 SELECT *
 FROM [MyDb_Dev].[dbo].[MyTable1] -- MyDb_Dev -> MyDb_Test -> MyDb_Prod

Em vez disso, podemos supor que o nome do banco de dados será fornecido como uma variável SQLCMD no processo de implantação e terá exatamente o mesmo arquivo implantado em todos os ambientes:
 -- :setvar databaseName "MyDb_Dev" -- uncomment for testing in SSMS

 SELECT *
 FROM [$(databaseName)].[dbo].[MyTable1]

(neste exemplo simples, o nome do banco de dados pode ser omitido completamente, mas se você tiver junções entre bancos de dados, é necessário usar o nome do banco de dados)