Usar o utilitário sqlcmd
O sqlcmd
utilitário é um utilitário de linha de comando para execução interativa e ad hoc de instruções e scripts Transact-SQL e para automatizar tarefas de script Transact-SQL. Para usar sqlcmd
interativamente ou para criar arquivos de script a serem executados usando sqlcmd
o , os usuários devem entender o Transact-SQL. O utilitário sqlcmd
é normalmente usado das seguintes maneiras:
Os usuários inserem interativamente instruções Transact-SQL de maneira semelhante a trabalhar no prompt de comando. Os resultados são exibidos no prompt de comando. Para abrir uma janela de prompt de comando, clique em Iniciar, clique em Todos os Programas, aponte para Acessóriose, em seguida, clique em Prompt de Comando. No prompt de comando, digite
sqlcmd
seguido por uma lista de opções que você deseja. Para obter uma lista completa das opções compatíveis comsqlcmd
o , consulte Utilitário sqlcmd.Os usuários enviam um
sqlcmd
trabalho especificando uma única instrução Transact-SQL a ser executada ou apontando o utilitário para um arquivo de texto que contém instruções Transact-SQL a serem executadas. O resultado geralmente é dirigido a um arquivo de texto, mas também pode ser exibido no prompt de comando.Modo SQLCMD no Editor de Consultas do SQL Server Management Studio.
SQL Server Management Objects (SMO)
Trabalhos do CmdExec do SQL Server Agent.
Opções sqlcmd normalmente usadas
As opções a seguir são usadas com mais frequência:
A opção de servidor (-S) que identifica a instância do Microsoft SQL Server à qual
sqlcmd
se conecta.Opções de autenticação (-E, -U e -P) que especificam as credenciais que
sqlcmd
usam para se conectar à instância do SQL Server.Observação
A opção -E é o padrão e não precisa ser especificada.
Opções de entrada (-Q, -q e -i) que identificam o local da entrada para
sqlcmd
.A opção de saída (-o) que especifica o arquivo no qual
sqlcmd
deve colocar sua saída.
Conectando-se ao utilitário sqlcmd
Estes são os usos comuns do utilitário sqlcmd
:
Conectando-se a uma instância padrão usando a Autenticação do Windows para executar instruções Transact-SQL de forma interativa:
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.Conexão com uma instância nomeada usando a Autenticação do Windows para executar instruções Transact-SQL interativamente:
sqlcmd -S <ComputerName>\<InstanceName>
ou
sqlcmd -S .\<InstanceName>
Conectando-se com 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>
Conectando-se a uma instância padrão no computador local usando a Autenticação do Windows, executando uma consulta e executando o
sqlcmd
até mesmo após a consulta ter sido concluída:sqlcmd -q "SELECT * FROM AdventureWorks2012.Person.Person"
Conectando-se a uma instância padrão no computador local usando a Autenticação do Windows, executando uma consulta, direcionando a saída para um arquivo e fazendo com que o
sqlcmd
feche após a conclusão da consulta:sqlcmd -Q "SELECT * FROM AdventureWorks2012.Person.Person" -o MyOutput.txt
Conectar-se a uma instância nomeada usando a Autenticação SQL Server para executar interativamente instruções Transact-SQL, solicitando
sqlcmd
uma senha:sqlcmd -U MyLogin -S <ComputerName>\<InstanceName>
Observação
Para consultar uma lista das opções que têm suporte no utilitário
sqlcmd
, executesqlcmd -?
.
Executando instruções Transact-SQL interativamente usando o sqlcmd
Você pode usar o sqlcmd
utilitário interativamente para executar instruções Transact-SQL em uma janela do Prompt de Comando. Para executar interativamente instruções Transact-SQL usando sqlcmd
, execute o utilitário sem usar as opções -Q, -q, -Z ou -i para especificar arquivos ou consultas de entrada. Por exemplo:
sqlcmd -S <ComputerName>\<InstanceName>
Quando o comando é executado sem arquivos de entrada ou consultas, sqlcmd
conecta-se à instância especificada do SQL Server e exibe uma nova linha com um 1>
seguido por um sublinhado piscando que é chamado de sqlcmd
prompt. O 1
significa que essa é a primeira linha de uma instrução Transact-SQL e o sqlcmd
prompt é o ponto no qual a instrução Transact-SQL será iniciada quando você a digitar.
sqlcmd
No prompt, você pode digitar instruções e sqlcmd
comandos Transact-SQL, como GO
e EXIT
. Cada instrução Transact-SQL é colocada em um buffer denominado cache de instrução. Essas instruções são enviadas para SQL Server depois que você digita o GO
comando e pressiona ENTER. Para sair sqlcmd
de , digite EXIT
ou QUIT
no início de uma nova linha.
Para limpar o cache de instruções, digite :RESET
. Digitar ^C
faz sqlcmd
com que saia. O ^C
também pode ser usado para interromper a execução do cache de instrução depois que um comando GO
é emitido.
Instruções Transact-SQL inseridas em uma sessão interativa podem ser editadas inserindo o comando :ED e o sqlcmd
prompt. O editor será aberto e, após a edição da instrução Transact-SQL e de fechamento do editor, a instrução Transact-SQL revisada aparecerá na janela de comando. Insira GO
para executar a instrução Transact-SQL.
Cadeia de caracteres entre aspas
Os caracteres entre aspas são usados sem nenhum pré-processamento adicional, a não ser quando as aspas podem ser inseridas em uma cadeia de caracteres através de duas aspas consecutivas. SQL Server trata esta sequência de caracteres como uma aspa. (Porém, a tradução acontece no servidor.) Não serão expandidas variáveis de script quando elas aparecerem dentro de uma cadeia de caracteres.
Por exemplo:
sqlcmd
PRINT "Length: 5"" 7'";
GO
Este é o conjunto de resultados.
Length: 5" 7'
Cadeias de caracteres que abrangem várias linhas
O sqlcmd
oferece suporte a scripts com cadeias de caracteres que abrangem várias linhas. Por exemplo, a seguinte instrução SELECT
estende diversas linhas, mas é uma única cadeia de caracteres executada ao pressionar a tecla ENTER, depois de digitar GO
.
SELECT First line
FROM Second line
WHERE Third line;
GO
Exemplo interativo do sqlcmd
Este é um exemplo do que você verá ao executar o sqlcmd
interativamente.
Ao abrir uma janela de prompt de comando, você verá uma linha semelhante a esta:
C:\> _
Isso significa que a pasta C:\
é a pasta atual, e se você especificar um nome de arquivo, o Windows vai 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 prompt de comando será:
C:\>sqlcmd
1> _
Isso significa que você se conectou com a instância do SQL Server e o sqlcmd
agora está pronto para aceitar as instruções Transact-SQL e os comandos sqlcmd
. O sublinhado intermitente que precede o 1>
é o prompt sqlcmd
que marca o local no qual as instruções e os comandos que você digita serão exibidos. Agora, digite USE AdventureWorks2012
e pressione ENTER e digite GO
e pressione ENTER. O conteúdo da janela de prompt de comando será:
sqlcmd
USE AdventureWorks2012;
GO
Este é o conjunto de resultados.
Changed database context to 'AdventureWorks2012'.
1> _
Pressionar ENTER depois de inserir USE AdventureWorks2012
sinaliza ao sqlcmd
para iniciar uma linha nova. Ao pressionar ENTER após digitar GO,
, você sinalizou o sqlcmd
para enviar a instrução USE AdventureWorks2012
à instância do SQL Server. sqlcmd
retornou uma mensagem para indicar que a instrução USE
foi concluída com êxito e exibiu um novo prompt 1>
como sinal para inserir uma nova instrução ou comando.
O exemplo a seguir mostra o conteúdo da janela de prompt de comando ao você digitar uma instrução SELECT
, uma GO
para executar o comando SELECT
, e uma EXIT
para fechar o sqlcmd
:
sqlcmd
USE AdventureWorks2012;
GO
SELECT TOP (3) BusinessEntityID, FirstName, LastName
FROM Person.Person;
GO
Este é o conjunto de resultados.
BusinessEntityID FirstName LastName
----------- -------------------------------- -----------
1 Syed Abbas
2 Catherine Abel
3 Kim Abercrombie
(3 rows affected)
1> EXIT
C:\>
As linhas depois da linha 3> GO
são a saída de uma instrução SELECT
. Depois que você gerar a saída, o sqlcmd
redefine o prompt sqlcmd
e exibe 1>
. Após digitar EXIT
na linha 1>
, a janela de prompt de comando exibe a mesma linha, como fez quando você a abriu primeiramente. Isto indica que o sqlcmd
encerrou sua sessão. Agora você pode fechar a janela de prompt de comando digitando outro comando EXIT
.
Executando arquivos de script Transact-SQL usando o sqlcmd
Você pode usar osqlcmd
para executar arquivos de script de banco de dados. Arquivos de script são arquivos de texto que contêm uma combinação de instruções Transact-SQL, sqlcmd
comandos e variáveis de script. Para obter mais informações sobre como usar variáveis de script, veja Usar sqlcmd com variáveis de script. O sqlcmd
funciona com instruções, comandos e variáveis de script em um arquivo de script de modo semelhante ao modo como funciona com instruções e comandos inseridos 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.
Existem maneiras diferentes de criar arquivos de script de banco de dados:
Você pode criar e depurar interativamente uma série de instruções Transact-SQL no SQL Server Management Studio e, em seguida, salvar o conteúdo da janela de consulta como arquivo de script.
Você pode criar um arquivo de texto que contém instruções Transact-SQL usando um editor de textos, como o Bloco de Notas.
Exemplos
a. Executando um script usando o sqlcmd
Iniciar o Bloco de Notas e digitar as seguintes instruções Transact-SQL:
USE AdventureWorks2012;
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
. Digite a sequência abaixo no prompt de comando para executar o script e colocar a saída em MyOutput.txt
, em MyFolder
:
sqlcmd -i C:\MyFolder\MyScript.sql -o C:\MyFolder\MyOutput.txt
Ao exibir os conteúdos de MyOutput.txt
no Bloco de Notas, você verá o seguinte:
Changed database context to 'AdventureWorks2012'.
BusinessEntityID FirstName LastName
---------------- ----------- -----------
1 Syed Abbas
2 Catherine Abel
3 Kim Abercrombie
(3 rows affected)
B. Usando o 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 utilizando a conexão de administrador dedicada (DAC).
C:\>sqlcmd -S ServerName -A
1> SELECT blocked FROM sys.dm_exec_requests WHERE blocked <> 0;
2> GO
Este é o conjunto de resultados.
spid blocked
------ -------
62 64
(1 rows affected)
Use o sqlcmd
para finalizar o processo de bloqueio.
1> KILL 64;
2> GO
C. Usando o sqlcmd para executar um procedimento armazenado
O exemplo a seguir mostra como executar um procedimento armazenado usando o sqlcmd
. Criar o seguinte procedimento armazenado.
USE AdventureWorks2012;
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
No prompt sqlcmd
, insira o seguinte:
C:\sqlcmd
1> :Setvar FirstName Gustavo
1> :Setvar LastName Achong
1> EXEC dbo.ContactEmailAddress $(Gustavo),$(Achong)
2> GO
EmailAddress
-----------------------------
gustavo0@adventure-works.com
D. Usando o sqlcmd para manutenção do banco de dados
O exemplo a seguir mostra como usar o sqlcmd
para uma tarefa de manutenção de banco de dados. Crie C:\BackupTemplate.sql
com o seguinte código.
USE master;
BACKUP DATABASE [$(db)] TO DISK='$(bakfile)';
No prompt sqlcmd
, insira o seguinte:
C:\ >sqlcmd
1> :connect <server>
Sqlcmd: Successfully connected to server <server>.
1> :setvar db msdb
1> :setvar bakfile c:\msdb.bak
1> :r c:\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. Usando o sqlcmd para executar o código em diversas instâncias
O código a seguir em um arquivo exibe um script que conecta a duas instâncias. Note 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. Retornando a saída XML
O exemplo a seguir mostra como a saída XML é retornada sem formatação, em um fluxo contínuo.
C:\>sqlcmd -d AdventureWorks2012
1> :XML ON
1> SELECT TOP 3 FirstName + ' ' + LastName + ', '
2> FROM Person.Person
3> GO
Syed Abbas, Catherine Abel, Kim Abercrombie,
F. Usando o sqlcmd em um arquivo de script do Windows
Um sqlcmd
comando como sqlcmd -i C:\InputFile.txt -o C:\OutputFile.txt,
pode ser executado em um arquivo .bat junto com o VBScript. Nesse caso, não use opções interativas. O sqlcmd
deve ser instalado no computador que está executando o arquivo .bat.
Primeiro, crie os quatro arquivos a seguir:
C:\badscript.sql
SELECT batch_1_this_is_an_error GO SELECT 'batch #2' GO
C:\goodscript.sql
SELECT 'batch #1' GO SELECT 'batch #2' GO
C:\returnvalue.sql
:exit(select 100) @echo off C:\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
C:\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:\windowsscript.bat
:
C:\>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 Bancos de Dados SQL do Azure
Um sqlcmd
pode ser executado em uma conexão com Banco de Dados SQL dados para especificar a criptografia e a confiança do certificado. Duas opções 'sqlcmd''' estão disponíveis:
A opção -N é usada pelo cliente para solicitar uma conexão criptografada. Essa opção é equivalente à opção
ENCRYPT = true
do ADO.net.A opção -C é usada pelo cliente para configurá-lo para confiar implicitamente no certificado do servidor e não validá-lo. Essa opção é equivalente à opção
TRUSTSERVERCERTIFICATE = true
do 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
As opções de SET a seguir não emitem exceções, mas não podem ser usadas. Elas são substituídas:
SET CONCAT_NULL_YIELDS_NULL
SET ANSI_PADDING
SET QUERY_GOVERNOR_COST_LIMIT
Sintaxe
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
Conectar usando credenciais do Windows, comunicação criptografada e certificado do servidor confiável:
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
.
Conectar usando credenciais do Windows, comunicação criptografada e certificado do servidor confiável:
SQLCMD -E
Conectar usando credenciais do Windows, comunicação criptografada e certificado do servidor confiável:
SQLCMD -E -N
Conectar usando credenciais do Windows, comunicação criptografada e certificado do servidor confiável:
SQLCMD -E -T
Conectar usando credenciais do Windows, comunicação criptografada e certificado do servidor confiável:
SQLCMD -E -N -C
Se o provedor especificar ForceProtocolEncryption = True
a criptografia será habilitada mesmo que Encrypt=No
esteja na cadeia de conexão.
Consulte Também
Utilitário sqlcmd
Usar sqlcmd com variáveis de script
Editar scripts SQLCMD com o Editor de Consultas
Gerenciar etapas de trabalho
Criar uma etapa de trabalho CmdExec