Utilize o sqlcmd
Aplica-se a:Banco de Dados SQL do
Banco de Dados SQL do Azure
Instância Gerenciada SQL do Azure
Azure Synapse Analytics
Analytics Platform System (PDW)
Banco de Dados SQL no Microsoft Fabric
sqlcmd é um utilitário de linha de comando para execução ad hoc e interativa de instruções e scripts Transact-SQL (T-SQL) e para automatizar tarefas de script T-SQL. Para usar sqlcmd interativamente ou para criar arquivos de script para sqlcmd, você deve entender o T-SQL. Você pode usar sqlcmd de várias maneiras. Por exemplo:
Insira instruções T-SQL no prompt de comando. O console retorna os resultados. Para abrir uma janela do Prompt de Comando, digite
cmd
na caixa de pesquisa do Windows e selecione do Prompt de Comando para abrir. No prompt de comando, digitesqlcmd
seguido por uma lista de opções desejadas. Para obter uma lista completa das opções suportadas pelo sqlcmd, consulte o sqlcmd utilitário.Submeta um trabalho sqlcmd ao especificar uma única instrução T-SQL para executar ou apontando o utilitário para um ficheiro de texto que contenha instruções T-SQL a serem executadas. A saída é direcionada para um arquivo de texto, mas também pode ser exibida no prompt de comando.
Modo SQLCMD no Editor de Consultas do SQL Server Management Studio (SSMS).
Objetos de gerenciamento do SQL Server (SMO).
Trabalhos do tipo CmdExec do SQL Server Agent.
Opções comuns do sqlcmd
A opção Servidor (
-S
) identifica a instância do SQL Server à qual sqlcmd se conecta.As opções de autenticação (
-E
,-U
e-P
) especificam as credenciais que sqlcmd usa para se conectar à instância do SQL Server.Observação
A opção
-E
é o padrão e não precisa ser especificada.As opções de entrada (
-Q
,-q
e-i
) identificam o local da entrada para sqlcmd.A opção de saída (
-o
) especifica o arquivo no qual sqlcmd deve colocar sua saída.
Conectar-se ao utilitário sqlcmd
Conecte-se a uma instância padrão usando a Autenticação do Windows para executar interativamente instruções T-SQL:
sqlcmd -S <ComputerName>
Observação
No exemplo anterior,
-E
não é especificado porque é o padrão e sqlcmd se conecta à instância padrão usando a Autenticação do Windows.Conecte-se a uma instância nomeada usando a Autenticação do Windows para executar interativamente instruções T-SQL:
sqlcmd -S <ComputerName>\<InstanceName>
ou
sqlcmd -S .\<InstanceName>
Conecte-se a uma instância nomeada usando a Autenticação do Windows e especificando arquivos de entrada e saída:
sqlcmd -S <ComputerName>\<InstanceName> -i <MyScript.sql> -o <MyOutput.rpt>
Conecte-se à instância padrão no computador local com a Autenticação do Windows, execute uma consulta e mantenha sqlcmd em execução após a conclusão da consulta:
sqlcmd -q "SELECT * FROM AdventureWorks2022.Person.Person"
Conecte-se à instância padrão no computador local com a Autenticação do Windows, execute uma consulta, direcione a saída para um arquivo e encerre o sqlcmd após a conclusão da consulta:
sqlcmd -Q "SELECT * FROM AdventureWorks2022.Person.Person" -o MyOutput.txt
Conecte-se a uma instância nomeada usando a Autenticação do SQL Server para executar interativamente instruções T-SQL, com sqlcmd solicitando uma senha:
sqlcmd -U MyLogin -S <ComputerName>\<InstanceName>
Dica
Para ver uma lista das opções suportadas pelo utilitário sqlcmd, execute:
sqlcmd -?
.
Executar instruções Transact-SQL interativamente usando sqlcmd
Você pode usar o utilitário sqlcmd interativamente para executar instruções T-SQL em uma janela de prompt de comando. Para executar interativamente instruções T-SQL usando sqlcmd , execute o utilitário sem usar as opções -Q
, -q
, -Z
ou -i
para especificar quaisquer arquivos de entrada ou consultas. Por exemplo:
sqlcmd -S <ComputerName>\<InstanceName>
Quando o comando é executado sem ficheiros de entrada ou consultas, sqlcmd conecta-se à instância especificada do SQL Server e, em seguida, exibe uma nova linha com um 1>
seguido por um cursor intermitente chamado prompt do sqlcmd. O 1
significa que esta é a primeira linha de uma instrução T-SQL, e o prompt sqlcmd é o ponto em que a instrução T-SQL começa quando você a digita.
No prompt sqlcmd, pode digitar instruções T-SQL e comandos sqlcmd , como GO
e EXIT
. Cada instrução T-SQL é colocada em um buffer chamado cache de instruções. Essas instruções são enviadas para o SQL Server depois que você digita o comando GO
e pressione Enter. Para sair do sqlcmd , digite EXIT
ou QUIT
no início de uma nova linha.
Para limpar o cache de instruções, digite :RESET
. Ao digitar Ctrl+C, o sqlcmd termina.
Ctrl+C também pode ser usado para interromper a execução do cache de instruções após a emissão de um comando GO
.
As instruções T-SQL inseridas em uma sessão interativa podem ser editadas inserindo o comando :ED
e o prompt sqlcmd. O editor será aberto e, depois de editar a instrução T-SQL e fechar o editor, a instrução T-SQL revisada aparecerá na janela de comando. Insira GO
executar a instrução T-SQL revisada.
Strings entre aspas
Os caracteres entre aspas são usados sem qualquer pré-processamento adicional, exceto que as aspas podem ser inseridas em uma cadeia de caracteres inserindo duas aspas consecutivas. O SQL Server trata essa sequência de caracteres como uma aspas. (No entanto, a tradução ocorre no servidor.) As variáveis de script não são expandidas quando aparecem em uma cadeia de caracteres.
Por exemplo:
sqlcmd
PRINT "Length: 5"" 7'";
GO
Aqui está o conjunto de resultados.
Length: 5" 7'
Cadeias de caracteres que abrangem várias linhas
sqlcmd suporta cadeias de caracteres que abrangem várias linhas. Por exemplo, a instrução SELECT
a seguir abrange várias linhas, mas é executada como uma única cadeia de caracteres depois de digitar GO
e pressionar Enter.
SELECT <First line>
FROM <Second line>
WHERE <Third line>;
GO
Exemplo de sqlcmd interativo
Este é um exemplo do que você vê quando executa sqlcmd de forma interativa.
Quando você abre uma janela de prompt de comando, há uma linha semelhante a:
C:\Temp\>
Isso significa que a pasta C:\Temp\
é a pasta atual e, se você especificar um nome de arquivo, o Windows procurará o arquivo nessa pasta.
Digite sqlcmd para se conectar à instância padrão do SQL Server no computador local e o conteúdo da janela do prompt de comando é o seguinte:
C:\Temp>sqlcmd
1>
Isso significa que você se conectou à instância do SQL Server e sqlcmd agora está pronto para aceitar instruções T-SQL e sqlcmd comandos. O sublinhado intermitente após o 1>
é o prompt do sqlcmd que marca o local onde as instruções e comandos que você digita são exibidos. Agora, digite USE AdventureWorks2022
e pressione Entere, em seguida, digite GO
e pressione Enter. O conteúdo da janela do prompt de comando é o seguinte:
sqlcmd
USE AdventureWorks2022;
GO
Aqui está o conjunto de resultados.
Changed database context to 'AdventureWorks2022'.
1>
Quando você pressiona Enter, ele sinaliza sqlcmd para iniciar uma nova linha. Pressionar Enter depois de digitar GO
, sinaliza sqlcmd para enviar a instrução USE AdventureWorks2022
para a instância do SQL Server.
sqlcmd retorna uma mensagem para indicar que a instrução USE
foi concluída com êxito e exibe um novo prompt de 1>
como um sinal para inserir uma nova instrução ou comando.
O exemplo seguinte mostra o que a janela do prompt de comando contém se tu digitares uma instrução SELECT
, um GO
para executar o SELECT
e um EXIT
para sair sqlcmd:
USE AdventureWorks2022;
GO
SELECT TOP (3) BusinessEntityID, FirstName, LastName
FROM Person.Person;
GO
Aqui está o conjunto de resultados.
BusinessEntityID FirstName LastName
----------------- ---------- ------------
1 Syed Abbas
2 Catherine Abel
3 Kim Abercrombie
Depois de gerar a saída, sqlcmd redefine o prompt do sqlcmd e exibe 1>
. Digite EXIT
no prompt 1>
para sair da sessão. Agora você pode fechar a janela do prompt de comando digitando outro comando EXIT
.
Criar e consultar um contêiner do SQL Server
Você pode usar sqlcmd (Go) para criar uma nova instância do SQL Server em um contêiner.
sqlcmd (Go) expõe uma instrução create
que permite especificar uma imagem de contêiner e um backup do SQL Server para criar rapidamente uma instância do SQL Server para fins de desenvolvimento, depuração e análise.
O comando a seguir mostra como ver todas as opções disponíveis para criar um novo contêiner do SQL Server:
sqlcmd create mssql --help
O comando a seguir cria uma nova instância do SQL Server usando a versão mais recente do SQL Server 2022 (16.x) e, em seguida, restaura o banco de dados de exemplo Wide World Imports:
sqlcmd create mssql --accept-eula --tag 2022-latest --using https://github.com/Microsoft/sql-server-samples/releases/download/wide-world-importers-v1.0/WideWorldImporters-Full.bak
Depois que a instância do SQL Server for criada, você poderá usar sqlcmd (Go) para gerenciá-la e consultá-la.
O comando a seguir confirma a versão da instância que foi criada:
sqlcmd query "SELECT @@version"
O comando a seguir inicia uma sessão interativa com a instância que foi criada:
sqlcmd query
O comando a seguir abre o Azure Data Studio e se conecta automaticamente ao banco de dados que foi restaurado durante o processo de criação:
sqlcmd open ads
O comando a seguir lista as cadeias de conexão a serem usadas para se conectar à instância que foi criada:
sqlcmd config connection-strings
O comando a seguir é usado para remover o contêiner quando ele não é mais necessário:
sqlcmd delete
Executar arquivos de script Transact-SQL usando sqlcmd
Você pode usar sqlcmd para executar arquivos de script de banco de dados. Arquivos de script são arquivos de texto que contêm uma mistura de instruções T-SQL, comandos sqlcmd e variáveis de script. Para obter mais informações sobre como criar scripts de variáveis, consulte Usar sqlcmd com variáveis de script. sqlcmd funciona com as instruções, comandos e variáveis de script em um arquivo de script de maneira semelhante a como ele funciona com instruções e comandos que são inseridos interativamente. A principal diferença é que sqlcmd lê o arquivo de entrada sem pausa, em vez de esperar que um usuário insira as instruções, comandos e variáveis de script.
Há diferentes maneiras de criar arquivos de script de banco de dados:
Você pode criar e depurar interativamente um conjunto de instruções T-SQL no SQL Server Management Studio e, em seguida, salvar o conteúdo da janela Consulta como um arquivo de script.
Você pode criar um arquivo de texto que contenha instruções T-SQL usando um editor de texto, como o Bloco de Notas.
Exemplos
Um. Executar um script usando sqlcmd
Inicie o bloco de notas e digite as seguintes instruções T-SQL:
USE AdventureWorks2022;
GO
SELECT TOP (3) BusinessEntityID, FirstName, LastName
FROM Person.Person;
GO
Crie uma pasta chamada MyFolder
e, em seguida, salve o script como o arquivo MyScript.sql
na pasta C:\MyFolder
. Escreva o seguinte comando na linha de comandos para executar o script e colocar a saída em MyOutput.txt
no MyFolder
:
sqlcmd -i C:\MyFolder\MyScript.sql -o C:\MyFolder\MyOutput.txt
Aqui está o conjunto de resultados.
Changed database context to 'AdventureWorks2022'.
BusinessEntityID FirstName LastName
----------------- ---------- ------------
1 Syed Abbas
2 Catherine Abel
3 Kim Abercrombie
(3 rows affected)
B. Usar sqlcmd com uma conexão administrativa dedicada
No exemplo a seguir, sqlcmd é usado para se conectar a um servidor que tem um problema de bloqueio usando a conexão de administrador dedicado (DAC).
C:\Temp\>sqlcmd -S ServerName -A
1> SELECT session_id, blocking_session_id FROM `sys.dm_exec_requests` WHERE blocking_session_id <> 0;
2> GO
Aqui está o conjunto de resultados.
session_id blocking_session_id
----------- --------------------`
62 64
(1 rows affected)
Use sqlcmd para encerrar o processo de bloqueio.
1> KILL 64;
2> GO
C. Usar sqlcmd para executar um procedimento armazenado
O exemplo a seguir mostra como executar um procedimento armazenado usando sqlcmd. Crie o seguinte procedimento armazenado.
USE AdventureWorks2022;
GO
IF OBJECT_ID('dbo.ContactEmailAddress', 'P') IS NOT NULL
DROP PROCEDURE dbo.ContactEmailAddress;
GO
CREATE PROCEDURE dbo.ContactEmailAddress (
@FirstName NVARCHAR(50),
@LastName NVARCHAR(50)
)
AS
SET NOCOUNT ON;
SELECT EmailAddress
FROM Person.Person
WHERE FirstName = @FirstName
AND LastName = @LastName;
SET NOCOUNT OFF;
GO
No prompt sqlcmd , digite o seguinte:
C:\Temp\sqlcmd
1> :Setvar FirstName Gustavo
1> :Setvar LastName Achong
1> EXEC dbo.ContactEmailAddress $(FirstName),$(LastName)
2> GO
EmailAddress
-----------------------------
gustavo0@adventure-works.com
D. Usar sqlcmd para manutenção de banco de dados
O exemplo a seguir mostra como usar sqlcmd para uma tarefa de manutenção de banco de dados. Crie C:\Temp\BackupTemplate.sql
com o código a seguir.
USE master;
BACKUP DATABASE [$(db)] TO DISK='$(bakfile)';
No prompt do sqlcmd , digite o seguinte código:
C:\Temp\>sqlcmd
1> :connect <server>
Sqlcmd: Successfully connected to server <server>.
1> :setvar db msdb
1> :setvar bakfile C:\Temp\msdb.bak
1> :r C:\Temp\BackupTemplate.sql
2> GO
Changed database context to 'master'.
Processed 688 pages for database 'msdb', file 'MSDBData' on file 2.
Processed 5 pages for database 'msdb', file 'MSDBLog' on file 2.
BACKUP DATABASE successfully processed 693 pages in 0.725 seconds (7.830 MB/sec)
E. Use sqlcmd para executar código em várias instâncias
O código a seguir em um arquivo mostra um script que se conecta a duas instâncias. Observe o GO
antes da conexão com a segunda instância.
:CONNECT <server>\,<instance1>
EXEC dbo.SomeProcedure
GO
:CONNECT <server>\,<instance2>
EXEC dbo.SomeProcedure
GO
E. Retornar saída XML
O exemplo a seguir mostra como a saída XML é retornada sem formatação, em um fluxo contínuo.
C:\Temp\>sqlcmd -d AdventureWorks2022
1> :XML ON
1> SELECT TOP 3 FirstName + ' ' + LastName + ', '
2> FROM Person.Person
3> GO
Syed Abbas, Catherine Abel, Kim Abercrombie,
F. Usar sqlcmd em um arquivo de script do Windows
Um comando sqlcmd como sqlcmd -i C:\Temp\InputFile.txt -o C:\Temp\OutputFile.txt,
pode ser executado num ficheiro .bat junto com o VBScript. Nesse caso, não use opções interativas.
sqlcmd deve ser instalado no computador que está executando o arquivo .bat.
Primeiro, crie os quatro arquivos a seguir no C:\Temp
:
C:\Temp\badscript.sql
SELECT batch_1_this_is_an_error GO SELECT 'batch #2' GO
C:\Temp\goodscript.sql
SELECT 'batch #1'; GO SELECT 'batch #2'; GO
C:\Temp\returnvalue.sql
:exit(select 100)
C:\Temp\windowsscript.bat
@echo off echo Running badscript.sql sqlcmd -i badscript.sql -b -o out.log if not errorlevel 1 goto next1 echo == An error occurred :next1 echo Running goodscript.sql sqlcmd -i goodscript.sql -b -o out.log if not errorlevel 1 goto next2 echo == An error occurred :next2 echo Running returnvalue.sql sqlcmd -i returnvalue.sql -o out.log echo SQLCMD returned %errorlevel% to the command shell :exit
Em seguida, no prompt de comando, execute C:\Temp\windowsscript.bat
:
C:\Temp\>windowsscript.bat
Running badscript.sql
== An error occurred
Running goodscript.sql
Running returnvalue.sql
SQLCMD returned 100 to the command shell
G. Usar sqlcmd para definir a criptografia no Banco de Dados SQL do Azure
sqlcmd pode ser executado numa ligação com a Base de Dados SQL para definir a encriptação e a confiança do certificado. Duas opções de sqlcmd estão disponíveis:
O comutador
-N
é usado pelo cliente para solicitar uma conexão criptografada. Esta opção é equivalente à opção ADO.netENCRYPT = true
.A opção
-C
é usada pelo cliente para configurá-lo a confiar implicitamente no certificado do servidor e não validá-lo. Esta opção é equivalente à opção ADO.netTRUSTSERVERCERTIFICATE = true
.
O serviço Banco de dados SQL não oferece suporte a todas as opções de SET
disponíveis em uma instância do SQL Server. As opções a seguir geram um erro quando a opção SET
correspondente é definida como ON
ou OFF
:
SET ANSI_DEFAULTS
SET ANSI_NULLS
SET REMOTE_PROC_TRANSACTIONS
SET ANSI_NULL_DEFAULT
As seguintes opções SET não lançam exceções, mas não podem ser usadas. Estão obsoletos:
SET CONCAT_NULL_YIELDS_NULL
SET ANSI_PADDING
SET QUERY_GOVERNOR_COST_LIMIT
Sintaxe
Os exemplos a seguir referem-se a casos em que as configurações do SQL Server Native Client Provider incluem:
ForceProtocolEncryption = False
Trust Server Certificate = No
Conecte-se usando credenciais do Windows e criptografe a comunicação:
sqlcmd -E -N
Conecte-se usando credenciais do Windows e certificado de servidor confiável:
sqlcmd -E -C
Conecte-se usando credenciais do Windows, criptografe a comunicação e confie no certificado do servidor:
sqlcmd -E -N -C
Os exemplos a seguir referem-se a casos em que as configurações do SQL Server Native Client Provider incluem:
ForceProtocolEncryption = True
TrustServerCertificate = Yes
Conecte-se usando credenciais do Windows, criptografe a comunicação e confie no certificado do servidor:
sqlcmd -E
Conecte-se usando credenciais do Windows, criptografe a comunicação e confie no certificado do servidor:
sqlcmd -E -N
Conecte-se usando credenciais do Windows, criptografe a comunicação e confie no certificado do servidor:
sqlcmd -E -C
Conecte-se usando credenciais do Windows, criptografe a comunicação e confie no certificado do servidor:
sqlcmd -E -N -C
Se o provedor especificar ForceProtocolEncryption = True
, a criptografia será habilitada, mesmo que Encrypt=No
esteja especificado na cadeia de conexão.