Compartilhar via


Usar sqlcmd

Aplica-se a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSistema de Plataforma de Análise (PDW)Banco de dados SQL no Microsoft Fabric

O sqlcmd é um utilitário de linha de comando para execução interativa e ad hoc de instruções e scripts T-SQL (Transact-SQL). Ele também automatiza tarefas de script T-SQL. Para usar o sqlcmd interativamente ou criar arquivos de script para sqlcmd, você deve entender o T-SQL. Você pode usar o sqlcmd de várias maneiras. Por exemplo:

  • Insira instruções T-SQL de uma CLI (interface de linha de comando). O console retorna os resultados.

    Note

    No Windows, você pode abrir uma janela do Prompt de Comando usando cmd na caixa de pesquisa do Windows e selecionando o Prompt de Comando. No macOS e no Linux, você pode usar o emulador de terminal interno.

    Digite sqlcmd no console, seguido por uma lista de opções desejadas e, em seguida, Insira. Para obter uma lista completa das opções compatíveis com o sqlcmd , consulte o utilitário sqlcmd.

  • Envie um trabalho sqlcmd especificando uma única instrução T-SQL a ser executada ou apontando o utilitário para um arquivo 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 console.

  • Modo SQLCMD no SQL Server Management Studio (SSMS).

  • SMO (SQL Server Management Objects).

  • Tarefas do SQL Server Agent CmdExec.

Opções comuns do sqlcmd

  • A opção de servidor (-S) identifica a instância do SQL Server com a qual o sqlcmd se conecta.

  • As opções de autenticação (-E, -U e -P) especificam as credenciais que o sqlcmd usa para se conectar à instância do SQL Server.

    Note

    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 o sqlcmd grava sua saída.

Conectar ao utilitário sqlcmd

  • Conecte-se a uma instância padrão usando a Autenticação do Windows para executar instruções T-SQL de forma interativa:

    sqlcmd -S <ComputerName>
    

    Note

    No exemplo anterior, -E não é especificado porque é o padrão. O 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 instruções T-SQL interativamente:

    sqlcmd -S <ComputerName>\<InstanceName>
    

    or

    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 até mesmo após a consulta ter sido concluída:

    sqlcmd -q "SELECT * FROM AdventureWorks2025.Person.Person"
    
  • Conecte-se a uma instância padrão no computador local com a Autenticação do Windows, execute uma consulta, direcione a saída para um arquivo e feche o sqlcmd após a conclusão da consulta:

    sqlcmd -Q "SELECT * FROM AdventureWorks2025.Person.Person" -o MyOutput.txt
    
  • Conecte-se a uma instância nomeada que usa a Autenticação do SQL Server para executar de forma interativa instruções T-SQL, com sqlcmd solicitando uma senha:

    sqlcmd -U MyLogin -S <ComputerName>\<InstanceName>
    

    Tip

    Para ver uma lista das opções compatíveis com o utilitário sqlcmd , execute: sqlcmd -?.

Executar instruções Transact-SQL interativamente usando o sqlcmd

Use o utilitário sqlcmd interativamente para executar instruções T-SQL no console. 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 qualquer arquivo ou consulta de entrada. Por exemplo:

sqlcmd -S <ComputerName>\<InstanceName>

Quando você executa o comando sem arquivos de entrada ou consultas, o sqlcmd se conecta à instância especificada do SQL Server. Em seguida, ele exibe uma nova linha com um 1> seguido de um sublinhado piscante que é chamado de prompt sqlcmd. O 1 significa que esta é a primeira linha de uma instrução T-SQL, e o prompt do sqlcmd é o ponto no qual a instrução T-SQL iniciará quando for digitada.

No prompt do sqlcmd, você pode digitar instruções T-SQL e comandos sqlcmd, como GO e EXIT. Cada instrução T-SQL entra em um buffer chamado cache de instruções. Essas instruções são enviadas ao SQL Server depois que você digita o comando GO e pressiona 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. Digitar Ctrl+C faz com que o sqlcmd saia. Ctrl+C também pode ser usado para interromper a execução do cache de instruções após um GO comando.

Insira o :ED comando no prompt do sqlcmd para editar instruções T-SQL. O editor é aberto e, depois de editar a instrução T-SQL e fechar o editor, a instrução T-SQL revisada aparece na janela de comando. Insira GO para executar a instrução T-SQL revisada.

Cadeias de caracteres entre aspas

Você pode usar caracteres entre aspas sem nenhum pré-processamento extra, exceto que você pode inserir aspas em uma cadeia de caracteres inserindo duas aspas consecutivas. O SQL Server trata esta sequência de caracteres como aspa simples. (Porém, a conversão acontece no servidor.) Variáveis de script não são expandidas quando aparecem dentro de uma string.

Por exemplo:

sqlcmd
PRINT "Length: 5"" 7'";
GO

Veja aqui o conjunto de resultados.

Length: 5" 7'

Cadeias de caracteres que abrangem várias linhas

O sqlcmd é compatível com cadeias de caracteres que abrangem várias linhas. Por exemplo, a seguinte instrução SELECT estende diversas linhas, mas executa como uma única cadeia de caracteres após inserir GO e depois pressionar Enter.

SELECT <First line>
FROM <Second line>
WHERE <Third line>;
GO

Exemplo interativo do sqlcmd

Este exemplo mostra o que você vê quando executa o sqlcmd interativamente.

Ao abrir uma janela do console no Windows, você poderá ver uma saída semelhante ao exemplo a seguir:

C:\Temp\>

Essa linha significa que a pasta C:\Temp\ é a pasta atual. Se você especificar um nome de arquivo, o sistema operacional procurará o arquivo nessa pasta.

Digite sqlcmd para se conectar à instância padrão do SQL Server no computador local. O conteúdo da janela do console é o seguinte:

C:\Temp>sqlcmd
1>

Essa saída significa que você se conectou à instância do SQL Server. O sqlcmd agora está pronto para aceitar instruções T-SQL e comandos sqlcmd. O sublinhado piscando após o 1> é o prompt sqlcmd. Ele marca o local em que as instruções e os comandos que você digita são exibidos. Agora, digite USE AdventureWorks2025 e pressione Enter. Em seguida, digite GO e pressione Enter. O conteúdo do console é o seguinte:

sqlcmd
USE AdventureWorks2025;
GO

Veja aqui o conjunto de resultados.

Changed database context to 'AdventureWorks2025'.
1>

Quando você pressiona Enter, ele sinalizará ao sqlcmd para iniciar uma nova linha. Pressionar Enter depois de digitar GO sinaliza ao sqlcmd para enviar a USE AdventureWorks2025 instrução para a instância do SQL Server. em seguida, o sqlcmd retorna uma mensagem para indicar que a instrução USE foi concluída com êxito. Ele exibe um novo 1> prompt como um sinal para inserir uma nova instrução ou comando.

O exemplo a seguir mostra o que o console contém se você digitar uma SELECT instrução, uma GO para executar o SELECT, e uma EXIT para sair do sqlcmd:

USE AdventureWorks2025;
GO
SELECT TOP (3) BusinessEntityID, FirstName, LastName
FROM Person.Person;
GO

Veja aqui o conjunto de resultados.

BusinessEntityID  FirstName  LastName
----------------- ---------- ------------
1                 Syed       Abbas
2                 Catherine  Abel
3                 Kim        Abercrombie

Após sqlcmd gerar a saída, o prompt sqlcmd é redefinido e exibe 1>. Digite EXIT no 1> prompt para sair da sessão. Agora você pode fechar a janela do console digitando outro EXIT comando, seguido por Enter.

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. O sqlcmd (Go) expõe uma create instrução para especificar uma imagem de contêiner e o backup do SQL Server. Você pode criar rapidamente uma instância do SQL Server para fins de desenvolvimento, depuração e análise.

Important

Você precisa de um runtime de contêiner instalado, como Docker ou Podman.

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 2025 (17.x) e restaura o banco de dados de exemplo wide world importers:

sqlcmd create mssql --accept-eula --tag 2025-latest --using https://github.com/Microsoft/sql-server-samples/releases/download/wide-world-importers-v1.0/WideWorldImporters-Full.bak

Depois de criar a instância do SQL Server, use sqlcmd (Go) para gerenciá-la e consultá-la.

O comando a seguir confirma a versão da instância que você criou:

sqlcmd query "SELECT @@version"

O comando a seguir inicia uma sessão interativa com a instância que você criou:

sqlcmd query

O comando a seguir lista as cadeias de conexão a serem usadas para se conectar à instância que você criou:

sqlcmd config connection-strings

Use o seguinte comando para remover o contêiner quando ele não for mais necessário:

sqlcmd delete

Executar arquivos de script Transact-SQL usando sqlcmd

Use 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 usar variáveis de script, consulte Usar sqlcmd com variáveis de script. O 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 você insere interativamente. A principal diferença é que o sqlcmd faz a leitura por meio do arquivo de entrada sem pausa, em vez de esperar que um usuário insira as instruções, os comandos e as variáveis de script.

Você pode criar arquivos de script de banco de dados de diferentes maneiras:

  • Crie e depure interativamente um conjunto de instruções T-SQL no SQL Server Management Studio e salve o conteúdo da janela Consulta como um arquivo de script.

  • Crie um arquivo de texto que contenha instruções T-SQL usando um editor de texto, como o Bloco de Notas.

Examples

A. Executar um script usando o sqlcmd

Iniciar o Bloco de Notas e digitar as seguintes instruções T-SQL:

USE AdventureWorks2025;
GO
SELECT TOP (3) BusinessEntityID, FirstName, LastName
FROM Person.Person;
GO

Criar uma pasta nomeada MyFolder e, em seguida, salvar o script como o arquivo MyScript.sql na pasta C:\MyFolder. Insira o seguinte comando no console para executar o script e colocar a saída em MyOutput.txtMyFolder:

sqlcmd -i C:\MyFolder\MyScript.sql -o C:\MyFolder\MyOutput.txt

Veja aqui o conjunto de resultados.

Changed database context to 'AdventureWorks2025'.
BusinessEntityID  FirstName  LastName
----------------- ---------- ------------
1                 Syed       Abbas
2                 Catherine  Abel
3                 Kim        Abercrombie
(3 rows affected)

B. Usar o sqlcmd com uma conexão administrativa dedicada

O exemplo a seguir usa o sqlcmd para se conectar a um servidor que tem um problema de bloqueio usando a DAC (conexão de administrador dedicada).

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

Veja aqui o conjunto de resultados.

session_id   blocking_session_id
-----------  --------------------`
62           64
(1 rows affected)

Use sqlcmd para finalizar o processo de bloqueio.

1> KILL 64;
2> GO

C. Usar o sqlcmd para executar um procedimento armazenado

O exemplo a seguir mostra como executar um procedimento armazenado usando sqlcmd. Criar o seguinte procedimento armazenado.

USE AdventureWorks2025;
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 do sqlcmd, insira o seguinte comando:

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 o sqlcmd para manutenção do 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 seguinte código.

USE master;
BACKUP DATABASE [$(db)] TO DISK = '$(bakfile)';

No prompt 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. Usar o sqlcmd para executar código em várias instâncias

O código a seguir em um arquivo exibe um script que conecta a duas instâncias. Observe GO antes da conexão com a segunda instância.

:CONNECT <server>\,<instance1>
EXEC dbo.SomeProcedure
GO
:CONNECT <server>\,<instance2>
EXEC dbo.SomeProcedure
GO

F. Retornar a saída XML

O exemplo a seguir mostra como a saída XML retorna como um fluxo contínuo não formatado.

C:\Temp\>sqlcmd -d AdventureWorks2025
1> :XML ON
1> SELECT TOP 3 FirstName + ' ' + LastName + ', '
2> FROM Person.Person
3> GO
Syed Abbas, Catherine Abel, Kim Abercrombie,

G. Usar o sqlcmd em um arquivo de script do Windows

Você pode executar um comando sqlcmd , como sqlcmd -i C:\Temp\InputFile.txt -o C:\Temp\OutputFile.txt, em um .bat arquivo junto com o VBScript. Não use opções interativas neste cenário. o sqlcmd deve ser instalado no computador que executa o .bat arquivo.

Primeiro, crie os quatro arquivos a seguir em 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, execute C:\Temp\windowsscript.bat no console:

C:\Temp\>windowsscript.bat
Running badscript.sql
== An error occurred
Running goodscript.sql
Running returnvalue.sql

SQLCMD returned 100 to the command shell

H. Usar sqlcmd para definir a criptografia no Bancos de Dados SQL do Azure

Você pode executar o sqlcmd em uma conexão com dados do Banco de Dados SQL para especificar a criptografia e a confiança do certificado. Duas opções sqlcmd estão disponíveis:

  • O -N comando é a solicitação do cliente para uma conexão criptografada. Essa opção é equivalente à opção ENCRYPT = truedo ADO.NET.

  • A -C opção configura o cliente para confiar implicitamente no certificado do servidor e não validá-lo. Essa opção é equivalente à opção TRUSTSERVERCERTIFICATE = truedo ADO.NET.

O serviço Banco de Dados SQL não dá suporte a todas as opções de SET disponíveis em uma instância do SQL Server. As opções a seguir emitem um erro quando a opção de SET correspondente é definida como ON ou OFF:

  • SET ANSI_DEFAULTS
  • SET ANSI_NULLS
  • SET REMOTE_PROC_TRANSACTIONS
  • SET ANSI_NULL_DEFAULT

SET As opções a seguir são preteridas. Eles não geram exceções, mas não podem ser usados:

  • SET CONCAT_NULL_YIELDS_NULL
  • SET ANSI_PADDING
  • SET QUERY_GOVERNOR_COST_LIMIT

Syntax

Os exemplos a seguir fazem referência a casos em que as configurações do provedor SQL Server Native Client incluem:

  • ForceProtocolEncryption = False
  • Trust Server Certificate = No

Conectar usando credenciais do Windows e comunicação criptografada:

sqlcmd -E -N

Conectar usando credenciais do Windows e certificado do 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 fazem referência a casos em que as configurações do provedor SQL Server Native Client 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, crieptografe 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 na cadeia de conexão.