Partilhar via


Utilize o sqlcmd

Aplica-se a:Banco de Dados SQL doBanco de Dados SQL do AzureInstância Gerenciada SQL do AzureAzure Synapse AnalyticsAnalytics 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, digite sqlcmd 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, -Ue -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, -qe -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, -Zou -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 SELECTe 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.

Importante

Você precisa de um runtime de contêiner instalado, como o Dockerou o 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 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.net ENCRYPT = 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.net TRUSTSERVERCERTIFICATE = 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.