Partilhar via


Utilitário osql

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada SQL do Azure do Azure Synapse AnalyticsAnalytics Platform System (PDW)

O utilitário osql permite que você insira instruções Transact-SQL, procedimentos do sistema e arquivos de script. Este utilitário usa ODBC para se comunicar com o servidor.

Importante

Esse recurso será removido em uma versão futura do SQL Server. Evite usar esse recurso em novos trabalhos de desenvolvimento e planeje modificar aplicativos que atualmente usam o recurso. Use sqlcmd em vez disso. Para obter mais informações, consulte Utilitário sqlcmd.

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 das opções osql .

-L

Lista os servidores configurados localmente e os nomes dos servidores que transmitem na rede.

Observação

O OSQL pode não receber uma resposta atempada de todos os servidores numa rede Windows. A lista de servidores devolvidos pode variar para cada invocação desta opção.

-U login_id

O ID de login do utilizador. Os IDs de login diferenciam maiúsculas de minúsculas.

-P senha

Uma senha especificada pelo usuário. Se a -P opção não for usada, o OSQL pede uma palavra-passe. Se a -P opção for usada no final do prompt de comandos sem qualquer palavra-passe, o osql usa a palavra-passe padrão (NULL).

Importante

Não utilize uma palavra-passe em branco. Use uma senha forte. Para mais informações, consulte Palavras-passe fortes.

As palavras-passe diferenciam maiúsculas de minúsculas.

A OSQLPASSWORD variável ambiente permite-te definir uma palavra-passe padrão para a sessão atual. Portanto, não precisa de codificar uma palavra-passe em ficheiros batch.

Se não especificares uma palavra-passe com a -P opção, o osql verifica primeiro a OSQLPASSWORD variável. Se nenhum valor for definido, o osql usa a palavra-passe padrão, NULL. O exemplo seguinte define a OSQLPASSWORD variável num prompt de comandos e depois acede à utilidade osql :

SET OSQLPASSWORD=abracadabra
osql

Importante

Para mascarar sua senha, não especifique a opção -P junto com a opção -U. Em vez disso, depois de especificares o osql juntamente com a -U opção e outros interruptores (não especifiques -P), carrega em Enter, e o osql pede-te uma palavra-passe. Este método garante que a sua palavra-passe é mascarada quando é introduzida.

-E

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

-S server_name[\instance_name]

Especifica a instância do SQL Server à qual se conectar. Especifique server_name para se conectar à instância padrão do SQL Server nesse servidor. Especifique <server_name>\<instance_name> para se ligar 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. Esta opção é necessária ao executar osql a partir de um computador remoto na rede.

- H wksta_name

Um nome de estação de trabalho. O nome da estação de trabalho é armazenado em sysprocesses.hostname e é exibido por sp_who. Se esta opção não for especificada, assume-se o nome atual do computador.

-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 login OSQL expirar. O timeout padrão para ligar ao OSQL é de oito segundos.

-time_out

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

-h cabeçalhos

Especifica o número de linhas a imprimir entre os cabeçalhos das colunas. O padrão é imprimir títulos uma vez para cada conjunto de resultados de consulta. -1 Use 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 definição (-h-1, não -h -1).

-s col_separator

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

-w column_width

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

-um packet_size

Permite que você solicite um pacote de tamanho diferente. Os valores válidos para packet_size são 512 a 65535. O valor padrão osql é o padrão do servidor. O aumento do tamanho dos pacotes pode melhorar o desempenho em execuções de scripts maiores, onde o número de instruções Transact-SQL entre GO comandos é substancial. Os testes da Microsoft indicam que 8192 é normalmente a configuração mais rápida para operações de cópia em massa. Pode ser solicitado um tamanho de pacote maior, mas o OSQL utiliza por defeito o padrão do servidor se o pedido não puder ser concedido.

-e

Ecos de entrada.

-I

Ativa a QUOTED_IDENTIFIER opção de ligação.

-D data_source_name

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

Observação

Esta opção não funciona com fontes de dados definidas para outros condutores.

-C cmd_end

Especifica o terminador de comando. Por padrão, os comandos são terminados e enviados para o SQL Server ao introduzirem GO numa linha isolada. Quando reiniciares o terminador de comandos, não uses palavras ou caracteres reservados do Transact-SQL que tenham um significado especial para o sistema operativo, sejam precedidos ou não por uma barra invertida.

-Q "Consulta"

Executa uma consulta quando o OSQL começa, mas não sai do OSQL quando a consulta termina. (A instrução da consulta não deve incluir GO). Se emitir uma consulta a partir de um ficheiro batch, use %<variable>, ou ambiente %<variable>%. Por exemplo:

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

Use aspas duplas ao redor da consulta e aspas simples em torno de qualquer coisa incorporada na consulta.

-Q" consulta "

Executa uma consulta e sai imediatamente do osql. Use aspas duplas ao redor da consulta e aspas simples em torno de qualquer coisa incorporada na consulta.

-n

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

-m error_level

Personaliza a exibição de mensagens de erro. O número da mensagem, o estado e o nível de erro são exibidos para erros do nível de gravidade especificado ou superior. Nada é exibido para erros de níveis inferiores ao nível especificado. Use -1 para especificar que todos os cabeçalhos são devolvidos com mensagens, mesmo mensagens informativas. Se usar -1, não deve haver espaço entre o parâmetro e a definição (-m-1, não -m -1).

-r { 0| 1}

Redireciona a saída da mensagem para o ecrã (stderr). Se não especificar um parâmetro, ou se especificar 0, apenas mensagens de erro com nível de gravidade 11 ou superior são redirecionadas. Se especificar 1, toda a saída de mensagens (incluindo "print") é redirecionada.

-Eu 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 em vez de -i.

-output_file

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

Se input_file não for Unicode e -u não estiver especificado, output_file está guardado em formato OEM. Se input_file estiver em Unicode ou -u for especificado, output_file é armazenado em formato Unicode.

-p

Imprime estatísticas de desempenho.

-b

Especifica que o osql sai e devolve um valor DOS ERRORLEVEL quando ocorre um erro. O valor devolvido à variável DOS ERRORLEVEL é 1 quando a mensagem de erro do SQL Server tem uma gravidade de 11 ou superior; caso contrário, o valor devolvido é 0. Ficheiros de batch do MS-DOS podem testar o valor do sistema DOS ERRORLEVEL e tratar o erro adequadamente.

-u

Especifica que output_file é armazenado no formato Unicode, independentemente do formato do input_file.

-R

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

-O

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

  • Processamento por lotes de EOF
  • Dimensionamento automático da largura do console
  • Mensagens amplas

Também define o valor padrão do DOS ERRORLEVEL para -1.

Observação

As -nopções , -O, e -D não são suportadas pelo OSQL.

Observações

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 no ecrã (stdout). Usar QUIT ou EXIT para sair do osql.

Se não especificar um nome de utilizador ao iniciar o OSQL, o SQL Server verifica as variáveis de ambiente e usa-as, 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 não especificares um servidor, usa-se o nome da estação de trabalho.

Se nenhuma das -U opções ou -P for utilizada, o SQL Server tenta ligar-se usando o Modo de Autenticação do Windows. A autenticação baseia-se na conta Windows do utilizador que executa 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 mais informações, consulte Considerações Quando Utilizar as Instruções SET.

Observação

A utilidade osql não suporta tipos de dados CLR definidos pelo utilizador. Para processar esses tipos de dados, você deve usar o utilitário sqlcmd . Para obter mais informações, consulte Utilitário sqlcmd.

Comandos OSQL

Além de Transact-SQL instruções dentro do osql, esses comandos também estão disponíveis.

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

Observação

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

Os terminadores GO de comando (por defeito), RESET, EXIT, QUIT, e Ctrl+C são reconhecidos apenas se aparecerem no início de uma linha, imediatamente após o prompt osql .

GO sinaliza o fim de um lote e a execução de quaisquer instruções de Transact-SQL em cache. Quando você carregar Enter no final de cada linha de entrada, o osql armazena em cache as instruções dessa linha. Quando pressionas Enter depois de escrever GO, todas as instruções atualmente em cache são enviadas em lote para SQL Server.

A utilidade OSQL atual funciona como se houvesse um implícito GO no final de qualquer script executado, portanto todas as instruções do script são executadas.

Termine um comando digitando uma linha que começa com um terminador de comando. Você pode seguir o comando terminator com um inteiro para especificar quantas vezes o comando deve ser executado. Por exemplo, para executar este comando 100 vezes, digite:

SELECT x = 1
GO 100

Os resultados são impressos uma vez no final da execução. A OSQL não aceita mais de 1.000 caracteres por linha. Grandes declarações devem ser distribuídas em várias linhas.

Pode usar as funcionalidades de chamada de comandos no Windows para recuperar e modificar instruções osql . O buffer de consulta existente pode ser limpo ao digitar RESET.

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

Use o OSQL de forma interativa

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

Você pode ler em um arquivo que contém uma consulta (como Stores.qry) para execução por osql digitando um comando semelhante a este:

osql -E -i stores.qry

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

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

Importante

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

Quando usa osql de forma interativa, pode ler um ficheiro do sistema operativo para o buffer de comandos com :r<file_name>. Isso envia o script SQL em file_name diretamente para o servidor como um único lote.

Observação

o osql trata o separador GO por lote como um erro de sintaxe, se aparecer num ficheiro 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ários: -- e /*...*/.

Use exit para devolver resultados no OSQL

Podes usar o resultado de uma SELECT instrução como valor de retorno do osql. Se for numérico, a última coluna da última linha do resultado é convertida para um inteiro de 4 bytes (longo). MS-DOS passa o byte inferior para o processo pai ou para o nível de erro do sistema operativo. O Windows passa todo o número inteiro de 4 bytes. A sintaxe é:

EXIT ( <query> )

Por exemplo:

EXIT(SELECT @@ROWCOUNT)

Você também pode incluir o parâmetro EXIT como parte de um arquivo em lotes. Por exemplo:

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

A utilidade osql passa tudo entre os parênteses () para o servidor exatamente como foi introduzido. 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 parênteses executa tudo o que a precede no lote e depois sai sem valor de retorno.

Existem quatro EXIT formatos:

Formato Detalhes
EXIT Não executa o lote; Desiste imediatamente e não retorna valor.
EXIT() Executa o lote e, em seguida, fecha e não retorna nenhum valor.
EXIT(<query>) Executa o lote, incluindo a consulta, e fecha depois de retornar os resultados da consulta.
RAISERROR com estado de 127 Se RAISERROR for usado num script osql e um estado de 127 é acionado, osql encerra e devolve o ID da mensagem ao cliente.

O exemplo seguinte demonstra como afetar o comportamento osql com RAISERROR:

RAISERROR (50001, 10, 127);

Este erro faz com que o script osql termine e devolve o ID da mensagem 50001 ao cliente.

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

  • -100: Erro encontrado antes de selecionar o valor de retorno.
  • -101: Não são encontradas linhas ao selecionar o valor de retorno.
  • -102: O erro de conversão ocorreu ao selecionar o valor de retorno.

Mostrar tipos de dados money e smallmoney

osql 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

Esta instrução produz um resultado de 10.3496, que indica que o valor é armazenado com todas as casas decimais intactas.