Compartilhar via


Utilitário osql

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do AzureAzure Synapse AnalyticsPDW (Analytics Platform System)

O utilitário osql permite inserir instruções Transact-SQL, procedimentos de sistema e arquivos de script. Esse utilitário usa o ODBC para comunicar-se com o servidor.

Importante

Esse recurso será removido em uma versão futura do SQL Server. Evite usar esse recurso em novo trabalho de desenvolvimento e planeje modificar os aplicativos que utilizam o recurso atualmente. Use sqlcmd em vez disso. Para saber mais, confira sqlcmd Utility.

Sintaxe

osql
[ -? ] |
[ -L ] |
[
  {
     { -Ulogin_id [ -Ppassword ] } | -E }
     [ -Sserver_name [ \instance_name ] ] [ -Hwksta_name ] [ -ddb_name ]
     [ -ltime_out ] [ -ttime_out ] [ -hheaders ]
     [ -scol_separator ] [ -wcolumn_width ] [ -apacket_size ]
     [ -e ] [ -I ] [ -D data_source_name ]
     [ -ccmd_end ] [ -q "query" ] [ -Q"query" ]
     [ -n ] [ -merror_level ] [ -r { 0 | 1 } ]
     [ -iinput_file ] [ -ooutput_file ] [ -p ]
     [ -b ] [ -u ] [ -R ] [ -O ]
]

Argumentos

-?

Exibe o resumo da sintaxe de opções osql.

-L

Lista os servidores configurados localmente e os nomes dos servidores que estão transmitindo na rede.

Observação

O osql pode não receber uma resposta oportuna de todos os servidores em uma rede do Windows. A lista de servidores retornados pode variar para cada invocação dessa opção.

- U login_id

A ID de logon do usuário. As IDs de logon diferenciam maiúsculas de minúsculas.

Senha -P

Uma senha especificada pelo usuário. Se a opção -P não for usada, o osql solicitará uma senha. Se a opção -P for usada no final do prompt de comando sem nenhuma senha, o osql usará a senha padrão (NULL).

Importante

Não use uma senha em branco. Use uma senha forte. Para obter mais informações, consulte Senhas fortes.

As senhas diferenciam maiúsculas de minúsculas.

A OSQLPASSWORD variável de ambiente permite que você defina uma senha padrão para a sessão atual. Portanto, você não precisa inserir uma senha em código nos arquivos de lote.

Se você não especificar uma senha com a opção -P , o osql primeiro verificará a OSQLPASSWORD variável. Se nenhum valor for definido, o osql usará a senha NULLpadrão. O exemplo a seguir define a OSQLPASSWORD variável em um prompt de comando e acessa o utilitário osql :

SET OSQLPASSWORD=abracadabra
osql

Importante

Para mascarar a senha, não especifique a opção -P junto com a opção -U. Em vez disso, depois de especificar o osql junto com a opção -U e outros comutadores (não especificar -P), pressione Enter e o osql solicitará uma senha. Esse método garante que sua senha será mascarada quando for inserida.

-E

Usa uma conexão confiável em vez de pedir uma senha.

-S server_name[\instance_name]

Especifica uma instância do SQL Server a qual se conectar. Especifica server_name para a conexão com a instância padrão do SQL Server nesse servidor. Especifique <server_name>\<instance_name> para se conectar a uma instância nomeada do SQL Server nesse servidor. Se nenhum servidor for especificado, o osql se conectará à instância padrão do SQL Server no computador local. Essa opção é obrigatória quando o osql é executado de um computador remoto na rede.

-H wksta_name

Um nome de estação de trabalho. O nome da estação de trabalho é armazenado sysprocesses.hostname e exibido por sp_who. Se essa opção não for especificada, o nome do computador atual será assumido.

-d db_name

Emite uma instrução USE db_name quando o osql é iniciado.

-l time_out

Especifica o número de segundos antes de um logon osql atingir o tempo limite. O tempo limite padrão para se conectar ao osql é de oito segundos.

-t timeout

Especifica o número de segundos antes de um comando atingir o tempo limite. Se um valor de tempo limite não for especificado, os comandos não expiram.

-h Cabeçalhos

Especifica o número de linhas a imprimir entre os títulos das colunas. O padrão é imprimir títulos uma vez para cada conjunto de resultados de consulta. Use -1 para especificar que nenhum cabeçalho deve ser impresso. Se -1 for usado, não deve haver espaço entre o parâmetro e a configuração (-h-1não -h -1).

-s col_separator

Especifica o caractere do separador de colunas que, por padrão, é um espaço em branco. Para usar um caractere com um significado especial para o sistema operacional (por exemplo, | ; e <>), coloque-o entre aspas duplas (").

-w column_width

Permite ao usuário definir a largura da tela de saída. O padrão é 80 caracteres. Quando uma linha de saída atinge a largura máxima da tela, ela é dividida em várias linhas.

-um packet_size

Permite solicitar um pacote de tamanho diferente. Os valores válidos para packet_size são 512 a 65.535. O valor padrão osql é o padrão do servidor. O aumento do tamanho do pacote pode aumentar o desempenho na execução de scripts mais longos, em que o número de instruções Transact-SQL entre os comandos GO é substancial. O teste da Microsoft indica que o 8192 normalmente é a configuração mais rápida para as operações de cópia em massa. Um tamanho de pacote maior pode ser solicitado, mas o osql usa como padrão o padrão do servidor se a solicitação não puder ser concedida.

-e

Repete a entrada.

-I

Define a opção QUOTED_IDENTIFIER de conexão.

- D data_source_name

Conecta-se a uma fonte de dados ODBC que é definida usando o driver ODBC do SQL Server. A conexão osql usa as opções especificadas na fonte de dados.

Observação

Essa opção não funciona com fontes de dados definidas para outros drivers.

-c cmd_end

Especifica o terminador de comando. Por padrão, os comandos são encerrados e enviados para o SQL Server inserindo GO em uma linha por si só. Ao redefinir o terminador de comando, não use palavras reservadas do Transact-SQL ou caracteres que tenham um significado especial para o sistema operacional, seja precedido por uma barra invertida ou não.

-q "consulta"

Executa uma consulta quando o osql é iniciado, mas não sai do osql quando a consulta é concluída. (A instrução de consulta não deve incluir GO). Se você emitir uma consulta de um arquivo em lote, use %<variable> e o ambiente %<variable>%. Por exemplo:

SET table=sys.objects
osql -E -q "select name, object_id from %table%"

Coloque a consulta entre aspas duplas e qualquer coisa incorporada na consulta entre aspas simples.

-Q" consulta "

Executa uma consulta e imediatamente encerra o osql. Coloque a consulta entre aspas duplas e qualquer coisa incorporada na consulta entre aspas simples.

-n

Remove a numeração e o símbolo de prompt (>) das linhas de entrada.

-m nível_de_erro

Personaliza a exibição de mensagens de erro. São exibidos o número da mensagem, o estado e o nível de erros com o nível de severidade especificado ou superior. Nada é exibido para erros de níveis abaixo do nível especificado. Use -1 para especificar que todos os cabeçalhos sejam retornados com mensagens, até mesmo mensagens informativas. Se estiver usando -1, não deverá haver espaço entre o parâmetro e a configuração (-m-1não -m -1).

-r { 0| 1}

Redireciona a saída da mensagem para a tela (stderr). Se você não especificar um parâmetro ou se especificar 0, somente as mensagens de erro com nível de severidade 11 ou superior serão redirecionadas. Se você especificar 1, toda a saída da mensagem (incluindo "print") será redirecionada.

-i input_file

Identifica o arquivo que contém um lote de instruções SQL ou procedimentos armazenados. O operador de comparação menor que (<) pode ser usado no lugar de -i.

-o output_file

Identifica o arquivo que recebe a saída do osql. O operador de comparação maior que (>) pode ser usado no lugar de -o.

Se input_file não for Unicode e -u não for especificado, output_file será armazenado no formato OEM. Se input_file é Unicode ou -u é especificado, output_file será armazenado no formato Unicode.

-p

Imprime estatísticas de desempenho.

-b

Especifica que o osql sai e retorna um valor DOS ERRORLEVEL quando ocorre um erro. O valor retornado para a variável DOS ERRORLEVEL é 1 quando a mensagem de erro do SQL Server tem uma severidade de 11 ou mais; caso contrário, o valor retornado é 0. Arquivos em lotes do MS-DOS podem testar o valor de variáveis do DOS ERRORLEVEL e manipular o erro adequadamente.

-u

Especificar que output_file será armazenado em formato Unicode, independentemente do formato de input_file.

-R

Especifica que o driver ODBC do SQL Server deve usar as configurações do cliente ao converter dados de moeda, data e hora em dados de caractere.

-O

Especifica que certos recursos do osql sejam desativados para corresponder ao comportamento de versões anteriores do isql. Estes recursos são desativados:

  • Processamento em lote de EOF
  • Escalonamento automático da largura do console
  • Mensagens largas

Ele também define o valor padrão do DOS ERRORLEVEL como -1.

Observação

As opções -n, -O e -D não são compatíveis com o osql.

Comentários

O utilitário osql é iniciado diretamente do sistema operacional com as opções que diferenciam maiúsculas de minúsculas listadas aqui. Depois que o osql é iniciado, ele aceita instruções SQL e as envia para o SQL Server interativamente. Os resultados são formatados e exibidos na tela (stdout). Use QUIT ou EXIT para sair do osql.

Se você não especificar um nome de usuário ao iniciar o osql, o SQL Server verificará as variáveis de ambiente e as usará, por exemplo, osqluser=(<user>) ou osqlserver=(<server>). Se nenhuma variável de ambiente for definida, o nome de usuário da estação de trabalho será usado. Se você não especificar um servidor, o nome da estação de trabalho será usado.

Se nem as opções -U ou -P forem usadas, o SQL Server tentará se conectar usando o Modo de Autenticação do Windows. A autenticação é baseada na conta do Windows do usuário que executa o osql.

O utilitário osql usa a API ODBC. O utilitário usa as configurações padrão do driver ODBC do SQL Server para as opções de conexão ISO do SQL Server . Para obter mais informações, consulte Considerações ao usar as instruções SET.

Observação

O utilitário osql não dá suporte a tipos de dados clr definidos pelo usuário. Para processar esses tipos de dados, você deve usar o utilitário sqlcmd . Para saber mais, confira sqlcmd Utility.

Comandos OSQL

Além das instruções Transact-SQL dentro do osql, os comandos a seguir também estão disponíveis.

Comando Descrição
GO Executa todas as instruções inseridas após a última GO.
RESET Apaga as declarações que você inseriu.
QUIT ou EXIT() Sai do osql.
Ctrl+C Finaliza uma consulta sem sair do osql.

Observação

Os comandos !! e ED não são suportados pelo osql.

Os terminadores GO de comando (por padrão), RESET, EXITe QUITCtrl+C, são reconhecidos somente se aparecerem no início de uma linha, imediatamente após o prompt osql.

GO sinaliza tanto o término de um lote quanto a execução de qualquer instrução Transact-SQL em cache. Quando você pressiona Enter no final de cada linha de entrada, o osql armazena em cache as instruções nessa linha. Quando você pressiona Enter após digitar GO, todas as instruções armazenadas em cache são enviadas como um lote para o SQL Server.

O utilitário osql atual funciona como se houvesse um implícito GO no final de qualquer script executado, portanto, todas as instruções no script são executadas.

Encerre um comando digitando uma linha que comece com um terminador de comando. Você pode seguir o terminador de comando com um inteiro para especificar quantas vezes o comando deve ser executado. Por exemplo, para executar esse comando 100 vezes, digite:

SELECT x = 1
GO 100

Os resultados são impressos uma única vez após o término da execução. O osql não aceita mais de 1.000 caracteres por linha. Declarações grandes devem ser divididas em várias linhas.

Você pode usar as funções de recuperação de comandos no Windows, para recuperar e modificar instruções osql. O buffer de consulta existente pode ser limpo digitando RESET.

Quando o osql executa procedimentos armazenados, ele imprime uma linha em branco entre cada conjunto de resultados em um lote. Além disso, a mensagem "0 linhas afetadas" não aparece quando não se aplica à instrução executada.

Usar osql interativamente

Para usar o osql interativamente, digite o comando osql (e qualquer uma das opções) em um prompt de comando.

Você pode ler em um arquivo contendo uma consulta (como Stores.qry) para execução pelo osql digitando um comando semelhante a este:

osql -E -i stores.qry

Você pode ler em um arquivo contendo uma consulta (como Titles.qry) e direcionar os resultados a outro arquivo digitando um comando semelhante a este:

osql -E -i titles.qry -o titles.res

Importante

Quando possível, use a opção -E (conexão confiável).

Ao usar osql interativamente, você pode ler um arquivo do sistema operacional no buffer de comando com :r<file_name>. Isso envia o script SQL no file_name diretamente para o servidor como um único lote.

Observação

O osql tratará o separador GO de lote como um erro de sintaxe, se ele aparecer em um arquivo de script SQL.

Inserir comentários

Você pode incluir comentários em uma instrução Transact-SQL enviada ao SQL Server pelo osql. São permitidos dois tipos de estilos de comentário: -- e /*...*/.

Usar a saída para retornar resultados no osql

Você pode usar o resultado de uma SELECT instrução como o valor retornado do osql. Se for numérico, a última coluna da última linha de resultado será convertida em um inteiro de 4 bytes (long). O MS-DOS transmite o byte baixo para o processo pai ou nível de erro do sistema operacional. O Windows passa o número inteiro de 4 bytes. A sintaxe é:

EXIT ( <query> )

Por exemplo:

EXIT(SELECT @@ROWCOUNT)

É possível incluir também o parâmetro EXIT como parte de um arquivo em lote. Por exemplo:

osql -E -Q "EXIT(SELECT COUNT(*) FROM '%1')"

O utilitário osql passa tudo entre os parênteses () para o servidor exatamente como inserido. Se um procedimento de sistema armazenado selecionar um conjunto e retornar um valor, somente a seleção será retornada. A EXIT() instrução sem nada entre os parênteses executa tudo o que a precede no lote e, em seguida, sai sem valor retornado.

Há quatro EXIT formatos:

Formato Detalhes
EXIT Não executa o lote; desiste imediatamente e não retorna nenhum valor.
EXIT() Executa o lote e então sai imediatamente e não retorna valor algum.
EXIT(<query>) Executa o lote, incluindo a consulta, e sai depois de retornar os resultados da consulta.
RAISERROR com um estado de 127 Se RAISERROR for usado em um script osql e um estado de 127 for gerado, o osql será encerrado e retornará a ID da mensagem de volta ao cliente.

O exemplo a seguir demonstra como afetar o comportamento osql com RAISERROR:

RAISERROR (50001, 10, 127);

Esse erro faz com que o script osql termine e retorna a ID da mensagem 50001 para o cliente.

Os valores de retorno -1 a -99 são reservados. o osql define os seguintes valores:

  • -100: erro encontrado antes de selecionar o valor retornado.
  • -101: nenhuma linha encontrada ao selecionar o valor retornado.
  • -102: erro de conversão ao selecionar o valor retornado.

Exibir os tipos de dados money e smallmoney

Oosql exibe os tipos de dados money e smallmoney com duas casas decimais, embora o SQL Server armazene o valor internamente com quatro casas decimais. Considere o exemplo:

SELECT CAST (CAST (10.3496 AS MONEY) AS DECIMAL (6, 4));
GO

Essa declaração produz um resultado de 10.3496, que indica que o valor está armazenado com todas as casas decimais intactas.