Partekatu bidez


osql Utilidad

Se aplica a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

La utilidad osql permite especificar archivos de script, procedimientos del sistema e instrucciones Transact-SQL. Esta herramienta utiliza ODBC para comunicarse con el servidor.

Importante

Esta característica se quitará en una versión futura de SQL Server. Evite utilizar esta característica en los nuevos trabajos de programación y planee modificar las aplicaciones que actualmente la utilizan. En su lugar, utilice sqlcmd. Para obtener más información, consulte sqlcmd Utility.

Sintaxis

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

-?

Muestra el resumen de la sintaxis de los modificadores de osql.

-L

Enumera los servidores configurados localmente y los nombres de los servidores que difunden en la red.

Nota

Es posible que osql no reciba una respuesta oportuna de todos los servidores de una red Windows. La lista de servidores devueltos puede variar para cada invocación de esta opción.

-U login_id

Identificador de inicio de sesión del usuario. Los identificadores de inicio de sesión distinguen entre mayúsculas y minúsculas.

-P password

Contraseña especificada por el usuario. Si no se usa la -P opción, osql solicita una contraseña. Si la -P opción se usa al final de la línea de comandos sin ninguna contraseña, osql usa la contraseña predeterminada (NULL).

Importante

No use una contraseña en blanco. Utilice una contraseña segura. Para obtener más información, consulte Contraseñas seguras.

En las contraseñas se distingue entre mayúsculas y minúsculas.

La OSQLPASSWORD variable de entorno permite establecer una contraseña predeterminada para la sesión actual. Por lo tanto, no es necesario codificar una contraseña en archivos por lotes.

Si no especifica una contraseña con la -P opción , osql comprueba primero la OSQLPASSWORD variable. Si no se establece ningún valor, osql usa la contraseña predeterminada, NULL. En el ejemplo siguiente se establece la OSQLPASSWORD variable en un símbolo del sistema y, a continuación, se accede a la utilidad osql :

SET OSQLPASSWORD=abracadabra
osql

Importante

Para enmascarar la contraseña, no especifique la opción -P junto con la opción -U. En su lugar, después de especificar osql junto con la -U opción y otros modificadores (no especifique -P), presione Entrar y osql le pedirá una contraseña. Este método garantiza que la contraseña se enmascare al introducirla.

-E

Utiliza una conexión de confianza en lugar de solicitar una contraseña.

-S server_name[\instance_name]

Especifica la instancia de SQL Server a la que hay que conectarse. Especifique server_name para conectar con la instancia predeterminada de SQL Server en ese servidor. Especifique <server_name>\<instance_name> para conectarse a una instancia con nombre de SQL Server en ese servidor. Si no se especifica ningún servidor, osql se conecta a la instancia predeterminada de SQL Server en el equipo local. Esta opción es necesaria cuando se ejecuta osql desde un equipo remoto conectado a la red.

-H wksta_name

Un nombre de estación de trabajo. El nombre de la estación de trabajo se almacena en sysprocesses.hostname y se muestra mediante sp_who. Si no se especifica esta opción, se asume el nombre del equipo actual.

-d db_name

Emite una instrucción USE db_name cuando se inicia osql .

-l tiempo_de_espera

Especifica el número de segundos antes de que se agote el tiempo de espera de un inicio de sesión de osql . El tiempo de espera predeterminado para conectarse a osql es de ocho segundos.

-t time_out

Especifica el número de segundos antes de que expire el tiempo de espera. Si no se especifica un valor de tiempo de espera, los comandos no agotan el tiempo de espera.

Encabezados -h

Especifica el número de filas que se van a imprimir entre los encabezados de las columnas. La opción predeterminada es imprimir los encabezados una vez para cada conjunto de resultados de la consulta. Use -1 para especificar que no se debe imprimir ningún encabezado. Si -1 se usa, no debe haber ningún espacio entre el parámetro y la configuración (-h-1, no -h -1).

-s col_separator

Especifica el carácter separador de columnas que, de forma predeterminada, es un espacio en blanco. Para utilizar caracteres con un significado especial para el sistema operativo (por ejemplo, | ; & <>), escríbalos entre comillas dobles (").

-w column_width

Permite al usuario ajustar el ancho de la pantalla para la salida. El valor predeterminado es 80 caracteres. Cuando una línea de salida alcanza su ancho máximo de pantalla, se divide en varias líneas.

-a packet_size

Permite solicitar un paquete de diferente tamaño. Los valores válidos de packet_size son de 512 a 65 535. El valor predeterminado de osql es el servidor predeterminado. En ejecuciones de scripts más grandes, el aumento del tamaño de paquete puede mejorar el rendimiento cuando el número de instrucciones de Transact-SQL entre los comandos GO es considerable. Las pruebas de Microsoft indican que 8192 suele ser la configuración más rápida para las operaciones de copia masiva. Se puede solicitar un tamaño de paquete mayor, pero osql utiliza el valor predeterminado del servidor si no se puede conceder la solicitud.

-e

Muestra lo escrito.

-I

Establece la opción de conexión QUOTED_IDENTIFIER activada.

-D data_source_name

Se conecta a un origen de datos ODBC que se define mediante el controlador ODBC para SQL Server. La conexión osql utiliza las opciones especificadas en el origen de datos.

Nota

Esta opción no funciona con orígenes de datos definidos para otros controladores.

-c cmd_end

Especifica el terminador del comando. De forma predeterminada, los comandos finalizan y se envían a SQL Server escribiendo GO en una línea por sí misma. Al restablecer el terminador de comandos, no utilice palabras reservadas de Transact-SQL o caracteres que tengan un significado especial para el sistema operativo, independientemente de que estén precedidos por una barra invertida o no.

-q "query"

Ejecuta una consulta cuando se inicia osql , pero no sale de osql cuando se completa la consulta. (La declaración de consulta no debe incluir GO). Si emite una consulta desde un archivo por lotes, use %<variable> o el entorno %<variable>%. Por ejemplo:

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

Utilice comillas dobles para la consulta y comillas simples en los elementos que incruste en la consulta.

-consulta "Q"

Ejecuta una consulta y sale inmediatamente de osql. Utilice comillas dobles para la consulta y comillas simples en los elementos que incruste en la consulta.

-n

Quita la numeración y el símbolo del sistema (>) de las líneas de entrada.

-m error_level

Personaliza la presentación de los mensajes de error. Se muestra el nivel de error, estado y número de mensaje en errores con el nivel de gravedad especificado o superior. No se mostrarán errores que tengan un nivel de gravedad inferior al nivel especificado. Use -1 para especificar que se devuelven todos los encabezados con mensajes, incluso mensajes informativos. Si usa -1, no debe haber ningún espacio entre el parámetro y la configuración (-m-1, no -m -1).

-r { 0| 1}

Redirige la salida del mensaje a la pantalla (stderr). Si no especifica un parámetro o si especifica 0, solo se redirigen los mensajes de error con un nivel de gravedad 11 o superior. Si especifica 1, se redirige toda la salida del mensaje (incluida la "impresión").

-i input_file

Identifica el archivo que contiene un lote de instrucciones SQL o procedimientos almacenados. El operador de comparación menor que (<) se puede usar en lugar de -i.

-o archivo_salida

Identifica el archivo que recibe la salida de osql. El operador de comparación mayor que (>) se puede usar en lugar de -o.

Si input_file no es Unicode y -u no se especifica, output_file se almacena en formato OEM. Si input_file es Unicode o -u se especifica, output_file se almacena en formato Unicode.

-p

Imprime las estadísticas de rendimiento.

-b

Especifica que osql sale y devuelve un valor DOS ERRORLEVEL cuando se produce un error. El valor devuelto a la variable DOS ERRORLEVEL es 1 cuando el mensaje de error de SQL Server tiene una gravedad de 11 o superior; de lo contrario, el valor devuelto es 0. Los archivos por lotes de MS-DOS pueden probar el valor de DOS ERRORLEVEL y controlar el error correctamente.

-u

Especifica que el archivo output_file se almacene en formato Unicode, independientemente del formato del archivo input_file.

-R

Especifica que el controlador ODBC de SQL Server debe usar la configuración de cliente al convertir datos de moneda, fecha y hora en datos de caracteres.

-O

Especifica que se desactiven algunas características de osql para emular el comportamiento de versiones anteriores de isql. Estas características están desactivadas:

  • Procesamiento por lotes de EOF
  • Escala automática de ancho de la consola
  • Mensajes detallados

También establece el valor predeterminado de DOS ERRORLEVEL en -1.

Nota

Las -nopciones , -Oy -D no son compatibles con osql.

Observaciones

La utilidad osql se inicia directamente desde el sistema operativo con las opciones en mayúsculas o en minúsculas, tal como se muestran aquí. Una vez que se inicia osql , acepta instrucciones SQL y las envía a SQL Server de forma interactiva. Los resultados tienen formato y se muestran en la pantalla (stdout). Use QUIT o EXIT para salir de osql.

Si no especifica un nombre de usuario al iniciar osql, SQL Server comprueba las variables de entorno y las usa, por ejemplo, osqluser=(<user>) o osqlserver=(<server>). Si no se establecen variables de entorno, se utilizará el nombre de usuario de la estación de trabajo. Si no especifica un servidor, se usa el nombre de la estación de trabajo.

Si no se usan ni las -U-P opciones, SQL Server intenta conectarse mediante el modo de autenticación de Windows. La autenticación se basa en la cuenta de Windows del usuario que ejecuta osql.

La utilidad osql utiliza la API de ODBC. La utilidad usa la configuración predeterminada del controlador ODBC de SQL Server para las opciones de conexión ISO de SQL Server. Para obtener más información, vea Consideraciones al usar las instrucciones SET.

Nota

La utilidad osql no admite tipos de datos definidos por el usuario clR. Para procesar estos tipos de datos, debe usar la utilidad sqlcmd. Para obtener más información, consulte sqlcmd Utility.

Comandos OSQL

Además de las instrucciones Transact-SQL de osql, los siguientes comandos también están disponibles.

Comando Descripción
GO Ejecuta todas las instrucciones especificadas después de la última GO.
RESET Borra cualquier instrucción que haya escrito.
QUIT o EXIT() Sale de osql.
Ctrl+C Finaliza una consulta sin salir de osql.

Nota

Osql no admite los comandos !! y ED.

Los terminadores de comandos GO (de forma predeterminada), RESET, EXIT, QUIT, Ctrl+C, solo se reconocen si aparecen al principio de una línea, inmediatamente después del indicador de osql.

GO marca tanto el final de un lote como la ejecución de cualquier instrucción de Transact-SQL almacenada en caché. Al presionar Entrar al final de cada línea de entrada, osql almacena en caché las instrucciones de esa línea. Al presionar Entrar después de escribir GO, todas las instrucciones almacenadas actualmente en caché se envían como un lote a SQL Server.

La utilidad osql actual funciona como si hubiera un implícito GO al final de cualquier script ejecutado, por lo que todas las instrucciones del script se ejecutan.

Finalice un comando; para ello, escriba una línea que comience con un terminador de comandos. Puede poner un entero después del terminador de comandos para especificar cuántas veces se debe ejecutar el comando. Por ejemplo, para ejecutar este comando 100 veces, escriba:

SELECT x = 1
GO 100

Los resultados se imprimen una vez al final de la ejecución. osql no acepta más de 1000 caracteres por línea. Las instrucciones grandes se deben distribuir en varias líneas.

Puede usar las instalaciones de recuperación de comandos en Windows para recuperar y modificar instrucciones osql . El búfer de consulta existente se puede borrar escribiendo RESET.

Cuando osql ejecuta procedimientos almacenados, imprime una línea en blanco entre cada conjunto de resultados en un lote. Además, el mensaje "0 filas afectadas" no aparece cuando no se aplica a la instrucción ejecutada.

Uso de osql de forma interactiva

Para usar osql de forma interactiva, escriba el comando osql (y cualesquiera de las opciones) junto al símbolo del sistema.

Puede leer un archivo que contenga una consulta (como Sores.qry) para ejecutarse en osql si escribe un comando como este:

osql -E -i stores.qry

Puede leer un archivo que contenga una consulta (como Titles.qry) y dirigir el resultado a otro archivo si escribe un comando similar a este:

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

Importante

Cuando sea posible, use la opción -E (conexión de confianza).

Cuando se usa osql de forma interactiva, puede leer un archivo de sistema operativo en el búfer de comandos con :r<file_name>. De esta manera, se enviará el script SQL de file_name directamente al servidor como un lote único.

Nota

osql trata el separador GO de lotes como un error de sintaxis, si aparece en un archivo de script SQL.

Insertar comentarios

Puede incluir comentarios en una instrucción Transact-SQL enviada a SQL Server por osql. Se permiten dos estilos de comentario: -- y /*...*/.

Uso de exit para devolver resultados en osql

Puede usar el resultado de una SELECT instrucción como valor devuelto de osql. Si es numérico, la última columna de la última fila de resultados se convierte en un entero de 4 bytes (long). MS-DOS pasa el byte bajo al proceso primario o al nivel de errores del sistema operativo. Windows pasa el entero de 4 bytes completo. La sintaxis es:

EXIT ( <query> )

Por ejemplo:

EXIT(SELECT @@ROWCOUNT)

También se puede incluir el parámetro EXIT como parte de un archivo por lotes. Por ejemplo:

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

La utilidad osql pasa todo lo que hay entre paréntesis () al servidor exactamente como se ha especificado. Si un procedimiento almacenado del sistema selecciona un conjunto y devuelve un valor, solo se devuelve la selección. La EXIT() instrucción sin nada entre los paréntesis ejecuta todo lo anterior en el lote de comandos y, a continuación, sale sin ningún valor devuelto.

Hay cuatro EXIT formatos:

Formato Detalles
EXIT No ejecuta el lote; sale inmediatamente y no devuelve ningún valor.
EXIT() Ejecuta el lote y, a continuación, sale sin devolver ningún valor.
EXIT(<query>) Ejecuta el lote, incluida la consulta, y, a continuación, sale tras devolver el resultado de la consulta.
RAISERROR con un estado de 127 Si RAISERROR se usa dentro de un script osql y se genera un estado de 127, osql cierra y devuelve el identificador de mensaje al cliente.

En el ejemplo siguiente se muestra cómo afectar al comportamiento de osql con RAISERROR:

RAISERROR (50001, 10, 127);

Este error hace que el script osql finalice y devuelve el identificador de mensaje 50001 al cliente.

Los valores de retorno de -1 a -99 están reservados. osql define los siguientes valores:

  • -100: error detectado antes de seleccionar el valor devuelto.
  • -101: no se encontró ninguna fila al seleccionar el valor devuelto.
  • -102: error de conversión al seleccionar el valor devuelto.

Mostrar tipos de datos money y smallmoney

osql muestra los tipos de datos money y smallmoney con dos posiciones decimales, aunque SQL Server almacena el valor internamente con cuatro posiciones decimales. Observe el ejemplo:

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

Esta instrucción da como resultado 10.3496, que indica que el valor se almacena con todos los decimales intactos.