Conheci o SQLCMD quando eu ia executar alguma atividade nos bancos SQL Server e achava que enviar evidência de execução tirando print de tela do SQL Management Studio era meio estranho. Estava acostumado com o SQL*Plus (da ORACLE), onde gerava um spool e toda a saída dos comandos executados e o retorno eram gravados em um arquivo texto de saída, que eu enviava para os solicitantes das atividades como evidência.
Realmente o SQL*Plus é bem mais completo que o SQLCMD, mas isso não tira o mérito do SQLCMD, que me foi de grande ajuda numa demanda onde precisei executar um script SQL de 500 MB para importação de dados numa base SQL Server. Tentei pelo Management Studio umas 10x, mas não carregava o arquivo nem por reza.. A solução foi recorrer ao já conhecido SQLCMD, que fez a atividade com 1 linha de comando, sem problema algum.
Não vou me estender muito, porque realmente existem vários e vários parâmetros do SQLCMD, além de comandos da própria ferramenta para “programar” nela, tipo umas macros, definição de variáveis, etc. Vou focar apenas nos principais recursos. Se você tem vontade de se aprofundar mais, sugiro visitar a página do SQLCMD da Microsoft ou conferir este link (em inglês)
Parâmetros de conexão
- -d <banco de dados>: Serve para especificar o nome do banco de dados que o comando será executado. Atualmente esse parâmetro está obsoleto e deve ser desativado em futuras versões, sendo substituído pelo comando USE [banco].
- -S <servidor>: Serve para especificar o servidor de conexão do SQL Server. Caso você queira se conectar em uma instância que não seja a padrão ou o servidor possui uma porta diferente da padrão (1433), utilize a sintaxe:
sqlcmd -S <servidor>\<instancia>, <porta>.
Ex: sqlcmd -S servidor_casa\instanciaTeste, 1453 - -A: Permite conectar no servidor com uma conexão dedicada para o administrador do banco de dados (Dedicated Administrator Connection – DAC)
Parâmetros de login
- -E: Tenta se conectar ao servidor utilizando o modo de autenticação Windows Authentication. Não é necessário informar o usuário ou senha, uma vez que a conexão é feita utilizando o usuário logado na máquina, que está previamente cadastrado no Active Directory. Se os parâmetros -P ou -U não forem informados, esse parâmetro é utilizado automaticamente.
- -U <usuario> -P <senha>: Tenta se conectar ao servidor utilizando o modo de autenticação SQL Server Authentication, onde é necessário informar um usuário e senha e esse usuário deve ter sido criado previamente nas diretivas de usuários do servidor (No Management Studio, Security > Logins)
Parâmetros de entrada e saída de arquivos
- -i <arquivo>: Define o arquivo de entrada a ser executado pelo SQLCMD. Caso parte do caminho tenha espaços, utiliza-se aspas (eu sempre utilizo, tendo espaço ou não).
Ex: sqlcmd -S pc-casa -i “C:\Meus Arquivos\query.sql” - -o <arquivo>: Define o arquivo de saída, onde serão gravadas as mensagens de saída retornadas pelo SQLCMD.
- -e: Define que as queries contidas no arquivo de entrada apareçam no arquivo de saída também.
- -u: Define que o arquivo de saída será gravado no formato Unicode (UTF-8).
Parâmetros de query
- -q <query>: Executa a query passada por parâmetro (utilize aspas). Para executar mais de uma query, utilize o ponto e vírgula (;). Esse parâmetro não pode ser utilizado em conjunto com o -i, pois eles são mutuamente exclusivos.
- -Q <query>: Faz a mesma coisa do parâmetro -q, mas após a execução, fecha o SQLCMD.
- -t <segundos>: Define o tempo de timeout (em segundos) da query que será executada. Após ultrapassar o limite definido, a conexão será encerrada, mesmo que não tenha sido executada por completo ainda.
- -s <caractere>: Define o caractere separador de colunas.
Ex: sqlcmd -S pc-casa -s ; -Q “select * from sys.sysobjects” - -W: Remove os espaços em branco à direita.
Parâmetros de erros
- -m<nivel de erro>: Define a partir de que nível de severidade de erro, as mensagens serão gravadas no arquivo de saída. Utilizando o parâmetro -1, todas as mensagens, até as informativas, serão gravadas. Esse parâmetro não aceita espaços. -m-1 é válido, mas -m -1 não.
- -V <nivel de erro>: Define a partir de qual nível de severidade as mensagens retornadas serão tratadas como erro.
Parâmetros diversos
- -?: Exibe o HELP do SQLCMD
Exemplos:
1
2
3
4
5
6
7
8
9
10
11
|
-- Conecta no servidor "servidor-casa", utilizando o usuário "damatto", senha "damatto", executa o script "teste.sql" e grava o resultado e o próprio arquivo de entrada no arquivo teste.log
sqlcmd -S servidor-casa -U damatto -P damatto -i "C:\Meus Dados\SQL\teste.sql" -e -o "C:\Meus Dados\SQL\teste.log"
-- Conecta no servidor "servidor-casa" utilizando autenticação Windows e executa o script "teste.sql"
sqlcmd -S servidor-casa -i "C:\Meus Dados\SQL\teste.sql"
-- Conecta no servidor "servidor-casa", instância "instanciaTeste", porta 1453. Executa uma query no servidor, onde o tempo de expiração é de 60 segundos. O resultado da query virá separado por ";" e não terá espaços em branco.
sqlcmd -S servidor-casa\instanciaTeste,1453 -q "SELECT TOP 10 * FROM sys.sysobjects" -t 60 -s ; -W
-- Conecta no servidor "servidor-casa", executa uma query no servidor, onde o tempo de expiração é 30 segundos. O resultado da query virá separado por ";", não terá espaços em branco e será gravado no arquivo "saida.log"
sqlcmd -S servidor-casa -q "SELECT * FROM sys.sysobjects" -t 30 -s ; -W -e -o "C:\saida.log"
|
Também é possível executar queries normalmente no SQLCMD
acompanhei no proximo post um exemplo pratico em produçao,
das funcionalidades mais uteis do SQLCMD ..
update:
http://scriptsemsql.blogspot.com.br/2016/06/executar-em-batch-todos-os-scripts-de.html
Nenhum comentário:
Postar um comentário