sqlcmd (utilidad)

Actualizado: 17 de julio de 2006

La utilidad sqlcmd permite escribir instrucciones Transact-SQL, procedimientos del sistema y archivos de secuencia de comandos en el símbolo del sistema, en el Editor de consultas en modo SQLCMD, en un archivo de secuencia de comandos de Windows o en un paso de trabajo del sistema operativo (Cmd.exe) de un trabajo del Agente SQL Server. Esta utilidad utiliza OLE DB para ejecutar lotes de Transact-SQL.

ms162773.note(es-es,SQL.90).gifImportante:
SQL Server Management Studio utiliza Microsoft .NET Framework SqlClient para ejecutar en modo normal y SQLCMD en el Editor de consultas. Cuando se ejecuta desde la línea de comandos, sqlcmd utiliza el proveedor OLE DB. Dado que se pueden aplicar diferentes opciones predeterminadas, podría obtener un comportamiento diferente al ejecutar la misma consulta en el modo SQLCMD de SQL Server Management Studio y en la utilidad sqlcmd.

Sintaxis

sqlcmd 
[{ { -U login_id [ -P password ] } | –E trusted connection }] 
[ -z new password ] [ -Z new password and exit]
[ -S server_name [ \ instance_name ] ] [ -H wksta_name ] [ -d db_name ]
[ -l login time_out ] [ -A dedicated admin connection ] 
[ -i input_file ] [ -o output_file ]
[ -f < codepage > | i: < codepage > [ < , o: < codepage > ] ]
[ -u unicode output ] [ -r [ 0 | 1 ] msgs to stderr ] 
[ -R use client regional settings ]
[ -q "cmdline query" ] [ -Q "cmdline query" and exit ] 
[ -e echo input ] [ -t query time_out ] 
[ -I enable Quoted Identifiers ] 
[ -v var = "value"...] [ -x disable variable substitution ]
[ -h headers ][ -s col_separator ] [ -w column_width ] 
[ -W remove trailing spaces ]
[ -k [ 1 | 2 ] remove[replace] control characters ] 
[ -y display_width ] [-Y display_width ]
[ -b on error batch abort ] [ -V severitylevel ] [ -m error_level ] 
[ -a packet_size ][ -c cmd_end ] 
[ -L [ c ] list servers[clean output] ] 
[ -p [ 1 ] print statistics[colon format] ] 
[ -X [ 1 ] ] disable commands, startup script, enviroment variables [and exit] 
[ -? show syntax summary ]

Opciones de línea de comandos

  • Opciones relacionadas con el inicio de sesión
  • -Ulogin_id
    Es el identificador de inicio de sesión del usuario.

    [!NOTA] La variable de entorno OSQLUSER está disponible por motivos de compatibilidad con versiones anteriores. La variable de entorno SQLCMDUSER tiene prioridad sobre OSQLUSER. Esto significa que sqlcmd y osql se pueden utilizar una junto a otra sin interferencias. También significa que las secuencias de comandos osql existentes seguirán funcionando.

    Si no se especifica la opción -U ni la opción -P, sqlcmd intenta conectarse mediante el modo de autenticación de Microsoft Windows. La autenticación se basa en la cuenta de Windows del usuario que está ejecutando sqlcmd.

    Si se utiliza la opción -U junto con la opción -E (descrita más adelante en este tema), se genera un mensaje de error. Si la opción –U va seguida de más de un argumento, se genera un mensaje de error y el programa se cierra.

  • -Ppassword
    Es una contraseña especificada por el usuario. En las contraseñas se distingue entre mayúsculas y minúsculas. Si se utiliza la opción -U y no la opción -P y además no se ha establecido la variable de entorno SQLCMDPASSWORD, sqlcmd solicita al usuario una contraseña. Si se utiliza la opción -P al final del símbolo del sistema sin una contraseña, sqlcmd utiliza la contraseña predeterminada (NULL).

    ms162773.security(es-es,SQL.90).gifNota de seguridad:
    No utilice una contraseña en blanco. Utilice una contraseña de alta seguridad. Para obtener más información, vea Contraseñas seguras.

    El mensaje de contraseña se muestra en la consola de la siguiente manera: Password:

    La entrada del usuario queda oculta. Esto significa que no se muestra nada y que el cursor permanece en su posición.

    La variable de entorno SQLCMDPASSWORD permite establecer una contraseña predeterminada para la sesión actual. Por lo tanto, las contraseñas no tienen que estar codificadas de forma rígida en los archivos de proceso por lotes.

    El siguiente ejemplo primero establece la variable SQLCMDPASSWORD en el símbolo del sistema y después tiene acceso a la utilidad sqlcmd. En el símbolo del sistema, escriba:

    SET SQLCMDPASSWORD= p@a$$w0rd

    ms162773.security(es-es,SQL.90).gifNota de seguridad:
    La contraseña será visible para cualquiera que pueda ver el monitor de su equipo.

    En el siguiente símbolo del sistema, escriba:

    sqlcmd

    Si la combinación de nombre de usuario y contraseña no es correcta, el proveedor OLE DB generará un mensaje de error.

    [!NOTA] La variable de entorno OSQLPASSWORD se ha conservado por motivos de compatibilidad. La variable de entorno SQLCMDPASSWORD tiene prioridad sobre la variable de entorno OSQLPASSWORD; esto significa que las utilidades sqlcmd y osql se pueden usar la una al lado de la otra sin interferencias y que las secuencias de comandos anteriores seguirán funcionando.

    Si la opción -P se utiliza junto con la opción -E, se genera un mensaje de error.

    Si la opción -P va seguida de más de un argumento, se genera un mensaje de error y el programa se cierra.

  • -E trusted connection
    Utiliza una conexión de confianza en lugar de utilizar un nombre de usuario y una contraseña para iniciar sesión en SQL Server. De manera predeterminada, sin especificar -E, sqlcmd utiliza la opción de conexión de confianza.

    La opción -E omite la posible configuración de la variable de entorno de nombre de usuario y contraseña, como SQLCMDPASSWORD. Si se utiliza la opción -E junto con la opción -U o la opción -P, se genera un mensaje de error.

  • -z new password
    Cambiar contraseña:

    sqlcmd -U someuser -P s0mep@ssword -z a_new_p@a$$w0rd

  • -Z new password and exit
    Cambiar contraseña y salir:

    sqlcmd -U someuser -P s0mep@ssword -Z a_new_p@a$$w0rd

  • -Sserver_name [ **\**instance_name ]
    Especifica la instancia de SQL Server a la que hay que conectarse. Establece la variable de secuencia de comandos de sqlcmd SQLCMDSERVER.

    Especifique server_name para conectarse a la instancia predeterminada de SQL Server en ese equipo servidor. Especifique server_name [ **\**instance_name ] para conectarse a una instancia con nombre de SQL Server en ese equipo servidor. Si no se especifica ningún equipo servidor, sqlcmd se conecta a la instancia predeterminada de SQL Server en el equipo local. Esta opción es necesaria si se ejecuta sqlcmd desde un equipo remoto conectado a la red.

    Si no especifica server_name [ **\**instance_name ] al iniciar sqlcmd, SQL Server comprobará si existe la variable de entorno SQLCMDSERVER y la utilizará.

    [!NOTA] La variable de entorno OSQLSERVER se ha conservado por motivos de compatibilidad. La variable de entorno SQLCMDSERVER tiene prioridad sobre la variable de entorno OSQLSERVER; esto significa que las utilidades sqlcmd y osql se pueden usar la una al lado de la otra sin interferencias y que las secuencias de comandos anteriores seguirán funcionando.

  • -Hwksta_name
    Es el nombre de una estación de trabajo. Esta opción establece la variable de secuencia de comandos de sqlcmd SQLCMDWORKSTATION. El nombre de la estación de trabajo se muestra en la columna host_name de la vista de administración dinámica sys.dm_exec_sessions o se puede devolver usando el procedimiento almacenado sp_who. Si no se especifica esta opción, el nombre actual del equipo es el valor predeterminado. Este nombre se puede usar para identificar diferentes sesiones de sqlcmd.
  • -ddb_name
    Emite una instrucción USE db_name cuando se inicia sqlcmd. Esta opción establece la variable de secuencia de comandos de sqlcmd SQLCMDDBNAME. Especifica la base de datos inicial. El valor predeterminado es la propiedad de base de datos predeterminada del inicio de sesión. Si la base de datos no existe, se genera un mensaje de error y sqlcmd se cierra.
  • -llogintime_out
    Especifica el número de segundos que tienen que transcurrir antes de que un inicio de sesión de sqlcmd al proveedor OLE DB agote el tiempo de espera cuando se intente conectar a un servidor. Esta opción establece la variable de secuencia de comandos de sqlcmd SQLCMDLOGINTIMEOUT. El tiempo de espera predeterminado del inicio de sesión de sqlcmd es de ocho segundos. El tiempo de espera de inicio de sesión debe ser un número entre 0 y 65.534. Si el valor proporcionado no es numérico o no está dentro de este intervalo, sqlcmd genera un mensaje de error. El valor 0 especifica que el tiempo de espera es infinito.
  • -A dedicated admin connection
    Inicia sesión en SQL Server con una Conexión de administrador dedicada (DAC). Este tipo de conexión se utiliza para solucionar problemas de un servidor. Sólo funcionará con equipos servidores que admitan DAC. Si DAC no está disponible, sqlcmd genera un mensaje de error y después se cierra. Para obtener más información acerca de DAC, vea Usar una conexión de administrador dedicada.
  • Opciones de entrada o salida
  • -i input_file[***,***input_file2...]
    Identifica el archivo que contiene un lote de instrucciones SQL o procedimientos almacenados. Se pueden especificar varios archivos que se leerán y se procesarán en orden. No utilice espacios en blanco entre los nombres de archivo. sqlcmd comprobará primero si todos los archivos especificados existen. Si uno o más archivos no existen, sqlcmd se cerrará. Las opciones -i y -Q/-q se excluyen mutuamente.

    Ejemplos de rutas de acceso:

    -i C:\<nombreDeArchivo>

    -i \\<Servidor>\<recursoCompartido$>\<nombreDeArchivo>

    -i "C:\Carpeta\<nombreDeArchivo>"

    Las rutas de acceso que contienen espacios deben incluirse entre comillas.

    Esta opción se puede utilizar más de una vez: -i input_file -i I input_file.

  • -ooutput_file
    Identifica el archivo que recibe la salida de sqlcmd.

    Si se especifica -u, el archivo output_file se almacena en formato Unicode. Si el nombre de archivo no es válido, se genera un mensaje de error y sqlcmd se cierra. sqlcmd no admite la escritura simultánea de varios procesos de sqlcmd en el mismo archivo. El archivo de salida estará dañado o será incorrecto. Vea el modificador -f para obtener más información acerca de formatos de archivo. Este archivo se creará si no existe. Se sobrescribirá cualquier archivo con el mismo nombre que pertenezca a una sesión de sqlcmd anterior. El archivo que se especifica aquí no es el archivo stdout. Si se especifica un archivo stdout, este archivo no se utilizará.

    Ejemplos de rutas de acceso:

    -o C:\< nombreDeArchivo>

    -o \\<Servidor>\<recursoCompatido$>\<nombreDeArchivo>

    -o "C:\Carpeta\<nombreDeArchivo>"

    Las rutas de acceso que contienen espacios deben incluirse entre comillas.

  • -f < codepage > | i: < codepage > [ <, o: < codepage > ]
    Especifica las páginas de códigos de entrada y de salida. El número de página de códigos es un valor numérico que especifica una página de códigos instalada en Windows. Para obtener más información, vea Configuración de intercalación en el programa de instalación.

    Reglas de conversión de páginas de códigos:

    • Si no se especifica ninguna página de código, sqlcmd utilizará la página de código actual para los archivos de entrada y salida, a menos que el archivo de entrada sea un archivo Unicode, en cuyo caso no es necesaria la conversión.
    • sqlcmd reconoce automáticamente archivos de entrada Unicode "big endian" y "little endian". Si se ha especificado la opción -u, la salida siempre será Unicode "little endian".
    • Si no se especifica ningún archivo de salida, la página de código de salida será la página de código de la consola. Esto permite que la salida se muestre correctamente en la consola.
    • Si hay varios archivos de entrada, se considera que pertenecen a la misma página de código. Los archivos de entrada Unicode y no Unicode pueden ser mixtos.

    Escriba chcp en el símbolo del sistema para comprobar la página de código de Cmd.exe.

  • -u unicode output
    Especifica que output_file se almacena en formato Unicode, independientemente del formato de input_file.
  • -r [ 0 | 1] msgs to stderr
    Redirige la salida del mensaje de error a la pantalla (stderr). Si no especifica ningún parámetro o si especifica 0, sólo se redirigirán los mensajes de error con un nivel de gravedad 11 o superior. Si especifica 1, toda salida de mensaje, incluida PRINT, se redirigirá. No tiene efecto si utiliza -o. De manera predeterminada, los mensajes se envían a stdout.
  • -R use client regional settings
    Establece el proveedor OLE DB de SQL Server para que utilice la configuración regional del cliente cuando convierta datos de hora, fecha y moneda en datos de caracteres. El valor predeterminado es la configuración regional del servidor.
  • Opciones de ejecución de consultas
  • -q" cmdline query "
    Ejecuta una consulta cuando se inicia sqlcmd, pero no cierra sqlcmd cuando finaliza la consulta. Se pueden ejecutar varias consultas delimitadas por punto y coma. Utilice las comillas alrededor de la consulta, como se muestra en el siguiente ejemplo.

    En el símbolo del sistema, escriba:

    sqlcmd -d AdventureWorks -q "SELECT FirstName, LastName FROM Person.Contact WHERE LastName LIKE 'Whi%';"

    sqlcmd -d AdventureWorks -q "SELECT TOP 5 FirstName FROM Person.Contact;SELECT TOP 5 LastName FROM Person.Contact;"

    ms162773.note(es-es,SQL.90).gifImportante:
    No utilice el terminador GO en la consulta.

    Si se especifica -b junto con esta opción, sqlcmd se cierra en caso de error. -b se describe más adelante en este tema.

  • **-Q"**cmdline query " and exit
    Ejecuta una consulta cuando se inicia sqlcmd e inmediatamente después cierra sqlcmd. Se pueden ejecutar varias consultas delimitadas por punto y coma.

    Utilice las comillas alrededor de la consulta, como se muestra en el siguiente ejemplo.

    En el símbolo del sistema, escriba:

    sqlcmd -d AdventureWorks -Q "SELECT FirstName, LastName FROM Person.Contact WHERE LastName LIKE 'Whi%';"

    sqlcmd -d AdventureWorks -Q "SELECT TOP 5 FirstName FROM Person.Contact;SELECT TOP 5 LastName FROM Person.Contact;"

    ms162773.note(es-es,SQL.90).gifImportante:
    No utilice el terminador GO en la consulta.

    Si se especifica -b junto con esta opción, sqlcmd se cierra en caso de error. -b se describe más adelante en este tema.

  • -e echo input
    Escribe secuencias de comandos de entrada en el dispositivo de salida estándar (stdout).
  • -I enable Quoted Identifiers
    Activa (ON) la opción de conexión SET QUOTED_IDENTIFIER. De forma predeterminada, está desactivada (OFF). Para obtener más información, vea SET QUOTED_IDENTIFIER (Transact-SQL).
  • -tquerytime_out
    Especifica el número de segundos que tienen que transcurrir antes de que un comando (o la instrucción de SQL) exceda el tiempo de espera. Esta opción establece la variable de secuencia de comandos de sqlcmd SQLCMDSTATTIMEOUT. Si no se especifica ningún valor para time_out, el comando no tiene tiempo de espera. El valor de querytime_out debe ser un número entre 1 y 65.535. Si el valor proporcionado no es numérico o no está dentro de este intervalo, sqlcmd genera un mensaje de error.

    Nota   El tiempo de espera real puede variar unos segundos con respecto al valor de time_out especificado.

  • -vvar=value[ var=value...]
    Crea una variable de secuencia de comandos de sqlcmd que se puede usar en una secuencia de comandos de sqlcmd. Si el valor contiene espacios en blanco, especifíquelo entre comillas. Puede especificar varios valores var="values". Si hay errores en cualesquiera de los valores especificados, sqlcmd genera un mensaje de error y después se cierra.

    sqlcmd -v MyVar1=something MyVar2="some thing"

    sqlcmd -v MyVar1=something -v MyVar2="some thing"

  • -x disable variable substitution
    Hace que sqlcmd omita las variables de secuencia de comandos. Es útil cuando una secuencia de comandos contiene muchas instrucciones INSERT que pueden contener cadenas con el mismo formato que las variables normales, por ejemplo, $(variable_name).
  • Opciones de formato
  • -hheaders
    Especifica el número de filas que se van a imprimir entre los encabezados de las columnas. El valor predeterminado es imprimir los encabezados una vez para cada conjunto de resultados de la consulta. Esta opción establece la variable de secuencia de comandos de sqlcmd SQLCMDHEADERS. Utilice -1 para especificar que no desea imprimir los encabezados. Cualquier valor que no es válido hará que sqlcmd genere un mensaje de error y se cierre.
  • -scol_separator
    Especifica el carácter del separador de columnas. El valor predeterminado es un espacio en blanco. Esta opción establece la variable de secuencia de comandos de sqlcmd SQLCMDCOLSEP. Para usar caracteres que tienen un significado especial para el sistema operativo como la y comercial (&) o el punto y coma (;), incluya el carácter entre comillas ("). El separador de columnas puede ser cualquier carácter de 8 bits.
  • -wcolumn_width
    Especifica el ancho de pantalla para la salida. Esta opción establece la variable de secuencia de comandos de sqlcmd SQLCMDCOLWIDTH. El ancho de la columna debe ser un número superior a 8 e inferior a 65.536. Si el ancho de la columna especificada no está dentro de ese intervalo, sqlcmd genera un mensaje de error. El ancho predeterminado es 80 caracteres. Cuando la línea de salida excede el ancho de columna especificado, se ajusta a la siguiente línea.
  • -W remove trailing spaces
    Esta opción quita los espacios finales de una columna. Utilice esta opción junto con la opción -s cuando prepare datos que se vayan a exportar a otra aplicación. No se puede usar con las opciones -y ni -Y.
  • -k [ 1 | 2 ] remove[replace] control characters
    Quita todos los caracteres de control, como fichas y nuevos caracteres de línea de la salida. De este modo se conserva el formato de las columnas cuando se devuelven datos. Si se especifica 1, los caracteres de control se reemplazan con un solo espacio. Si se especifica 2, los caracteres de control consecutivos se reemplazan por un solo espacio.
  • -ydisplay_width
    Establece la variable de secuencia de comandos de sqlcmd SQLCMDMAXVARTYPEWIDTH. El valor predeterminado = 0 (no establecido). Limita el número de caracteres que se devuelve para tipos de datos de longitud variable:

    • varchar(max)
    • nvarchar(max)
    • varbinary(max)
    • xml
    • UDT (tipos definidos por el usuario)
    • text
    • ntext
    • image

    [!NOTA] Los UDT pueden ser de longitud fija, en función de la implementación. Si esta longitud de un UDT de longitud fija es más corta que display_width, el valor del UDT devuelto no se ve afectado. No obstante, si la longitud es mayor que display_width, la salida queda truncada.

    Si display_width es 0, la salida queda truncada en 1 MB. Puede utilizar el comando :XML ON para evitar que la salida se trunque. El comando :XML ON se describe más adelante en este tema.

    ms162773.note(es-es,SQL.90).gifImportante:
    Utilice la opción -y 0 con mucha precaución, ya que puede causar graves problemas de rendimiento en el servidor y en la red, dependiendo del tamaño de los datos devueltos.
  • -Ydisplay_width
    Establece la variable de secuencia de comandos de sqlcmd SQLCMDMAXFIXEDTYPEWIDTH. El valor predeterminado es 256. Limita el número de caracteres que se devuelve para los siguientes tipos de datos:

    • char donde 1<n<8000
    • nchar donde 1<n<4000
    • varchar(n) donde 1<n<8000
    • nvarchar(n) donde 1<n<4000
    • varbinary(n) donde 1<n<8000
    • sql_variant
  • Opciones de informes de errores
  • -b on error batch abort
    Especifica que sqlcmd se cierre y devuelva un valor de DOS ERRORLEVEL cuando se produzca un error. El valor que se devuelve a la variable DOS ERRORLEVEL es 1 cuando el mensaje de error de SQL Server tiene un nivel de gravedad superior a 10; de lo contrario, el valor devuelto es 0. Si se ha establecido la opción -V además de -b, sqlcmd no notificará un error si el nivel de gravedad es inferior a los valores establecidos mediante -V. Los archivos de proceso por lotes del símbolo del sistema pueden probar el valor de ERRORLEVEL y tratar el error adecuadamente. sqlcmd no notifica errores del nivel de gravedad 10 (mensajes de información).

    Si la secuencia de comandos de sqlcmd contiene un comentario incorrecto, un error de sintaxis o carece de una variable de secuencia de comandos, el valor de ERRORLEVEL devuelto es 1.

  • -V severitylevel
    Especifica el nivel de gravedad más bajo que notifica sqlcmd. Cuando se produce un error en una secuencia de comandos de Transact-SQL, el nivel de gravedad se notifica sólo si es mayor o igual que el valor especificado con el modificador -V. Si el nivel de gravedad es inferior a 0, se notifica. El nivel de error predeterminado es 0. Los archivos de proceso por lotes del símbolo del sistema pueden probar el valor de ERRORLEVEL y controlar el error adecuadamente.
  • -merror_level
    Personaliza la presentación de los mensajes de error. Se muestra el número de mensaje, el estado y el nivel de error para errores con un nivel de gravedad superior al especificado. No se muestra ninguna información para errores de una gravedad inferior al nivel especificado. Utilice -1 para especificar que se devuelvan todos los encabezados con los mensajes, incluso con los mensajes informativos. Si se especifica -1, no incluya un espacio entre el parámetro y la configuración (por ejemplo, -m-1, no -m-1).

    Esta opción establece la variable de secuencia de comandos de sqlcmd SQLCMDERRORLEVEL, cuyo valor predeterminado es 0.

  • Otras opciones
  • -apacket_size
    Solicita un paquete de tamaño diferente. Esta opción establece la variable de secuencia de comandos de sqlcmd SQLCMDPACKETSIZE. packet_size debe ser un valor entre 512 y 32.767. El valor predeterminado = 4096. Un tamaño de paquete mayor puede mejorar el rendimiento para la ejecución de las secuencias de comandos que tienen muchas instrucciones SQL entre comandos GO. Puede solicitar un tamaño de paquete mayor. Sin embargo, si se deniega la solicitud, sqlcmd utiliza el valor predeterminado del servidor para el tamaño del paquete.
  • -ccmd_end
    Especifica el terminador del lote. De forma predeterminada, los comandos se terminan y se envían a SQL Server escribiendo la palabra "GO" en una línea aparte. Cuando restablezca el terminador del lote, no utilice palabras reservadas de Transact-SQL o caracteres especiales que tienen un significado especial para el sistema operativo, incluso aunque vayan precedidos de una barra diagonal invertida.
  • -L [ c ] list servers[clean output]
    Enumera los equipos servidores configurados localmente y los nombres de los equipos servidores que difunden en la red. Este parámetro no se puede usar en combinación con otros parámetros. El número máximo de equipos servidor que se puede mostrar es 3.000. Si la lista de servidores se trunca debido al tamaño del búfer, se muestra un mensaje de advertencia.

    [!NOTA] Debido a la naturaleza de la difusión en las redes, sqlcmd puede no recibir una respuesta a tiempo de todos los servidores. Por lo tanto, la lista de servidores devuelta puede variar en cada invocación de esta opción.

    Si se especifica el parámetro opcional c, la salida aparece sin la línea de encabezado Servers: y cada línea de servidor se muestra sin espacios delante. Esto se denomina salida limpia. La salida limpia mejora el rendimiento del procesamiento de los lenguajes de secuencias de comandos.

  • -p [ 1 ] print statistics[colon format]
    Imprime estadísticas de rendimiento para cada conjunto de resultados. A continuación se muestra un ejemplo del formato para las estadísticas de rendimiento:

    Network packet size (bytes): n

    x xact[s]:

    Clock Time (ms.): total t1 avg t2 (t3 xacts per sec.)

    Donde:

    x indica el número de transacciones que procesa SQL Server.

    t1 indica el tiempo total de todas las transacciones.

    t2 indica el tiempo medio de una única transacción.

    t3 indica el número medio de transacciones por segundo.

    Todos los tiempos se indican en milisegundos.

    Si se especifica el parámetro opcional 1, el formato de salida de las estadísticas es el separado por dos puntos, que se puede importar fácilmente en una hoja de cálculo o se puede procesar en una secuencia de comandos.

    Si el parámetro opcional es cualquier valor diferente de 1, se genera un error y sqlcmd se cierra.

  • -X [ 1 ] disable commands, startup script, enviroment variables [and exit]
    Deshabilita comandos que pueden poner en peligro la seguridad del sistema cuando se ejecuta sqlcmd desde un archivo de proceso por lotes. Los comandos deshabilitados se siguen reconociendo; sqlcmd emite un mensaje de advertencia y continúa. Si se especifica el parámetro opcional 1, sqlcmd genera un mensaje de error y después se cierra. Los siguientes comandos se deshabilitan cuando se utiliza la opción -X:

    • ED
    • **!!**command

    Si se especifica la opción -X, eso evita que se pasen variables de entorno a sqlcmd. También impide que la secuencia de comandos de inicio especificada mediante la variable de secuencia de comandos SQLCMDINI se ejecute. Para obtener más información acerca de las variables de secuencia de comandos sqlcmd, vea Usar sqlcmd con variables de secuencia de comandos.

  • -? show syntax summary
    Muestra el resumen de la sintaxis de las opciones de sqlcmd.

Notas

Las opciones no tienen que utilizarse forzosamente en el orden mostrado en la sección de sintaxis.

Cuando se devuelven varios resultados, sqlcmd imprime una línea en blanco entre cada conjunto de resultados de un lote. Además, el mensaje "<x> filas afectadas" no aparece cuando no se aplica a la instrucción ejecutada.

Para utilizar sqlcmd de forma interactiva, escriba sqlcmd en el símbolo del sistema con una o varias de las opciones descritas anteriormente en este tema. Para obtener más información, vea Usar la utilidad sqlcmd.

[!NOTA] Las opciones -L, -Q, -Z o -i hacen que sqlcmd se cierre después de la ejecución.

La longitud total de la línea de comandos sqlcmd en el entorno de comandos (Cmd.exe), incluidos todos los argumentos y las variables expandidas, es la que determine el sistema operativo para Cmd.exe. Varía según el sistema operativo. Para Windows Server 2003 y Windows XP, la longitud es 8.191; mientras que para Windows 2000 y Windows NT4, es 2.047.

Precedencia de variables (menor a mayor)

  1. Variables de entorno en el nivel de sistema.
  2. Variables de entorno en el nivel de usuario.
  3. Shell de comandos (SET X=Y) establecido en el símbolo del sistema antes de ejecutar sqlcmd.
  4. sqlcmd-v X=Y
  5. :Setvar X Y

[!NOTA] Para ver las variables de entorno, en el Panel de control, abra Sistema y haga clic en la ficha Opciones avanzadas.

Variables de secuencia de comandos sqlcmd

Variable Modificador relacionado L/E Valor predeterminado

SQLCMDUSER

-U

L

""

SQLCMDPASSWORD

-P

--

""

SQLCMDSERVER

-S

L

"DefaultLocalInstance"

SQLCMDWORKSTATION

-H

L

"ComputerName"

SQLCMDDBNAME

-d

L

""

SQLCMDLOGINTIMEOUT

-l

L/E

"8" (segundos)

SQLCMDSTATTIMEOUT

-t

L/E

"0" = esperar indefinidamente

SQLCMDHEADERS

-h

L/E

"0"

SQLCMDCOLSEP

-s

L/E

" "

SQLCMDCOLWIDTH

-w

L/E

"0"

SQLCMDPACKETSIZE

-a

L

"4096"

SQLCMDERRORLEVEL

-m

L/E

0

SQLCMDMAXVARTYPEWIDTH

-y

L/E

"256"

SQLCMDMAXFIXEDTYPEWIDTH

-Y

L/E

"0" = ilimitado

SQLCMDEDITOR

L/E

"edit.com"

SQLCMDINI

L

""

SQLCMDUSER, SQLCMDPASSWORD y SQLCMDSERVER se establecen cuando se utiliza :Connect

.

L indica que el valor sólo puede establecerse una vez durante la inicialización del programa.

L/E indica que el valor puede modificarse mediante el comando setvar y que los comandos siguientes se verán influidos por el nuevo valor.

Comandos de sqlcmd

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

GO [count]

:List

[:] RESET

:Error

[:] ED

:Out

[:] !!

:Perftrace

[:] QUIT

:Connect

[:] EXIT

:On Error

:r

:Help

:ServerList

:XML [ON | OFF]

:Setvar

:Listvar

Tenga en cuenta lo siguiente cuando utilice comandos de sqlcmd:

  • Todos los comandos de sqlcmd, excepto GO, deben ir precedidos de dos puntos (:).
    ms162773.note(es-es,SQL.90).gifImportante:
    Para mantener la compatibilidad con las secuencias de comandos de osql existentes, algunos de los comandos se reconocerán sin los dos puntos. Esto está indicado por [:].
  • Los comandos de sqlcmd se reconocen sólo si aparecen al principio de una línea.
  • Todos los comandos de sqlcmd no distinguen entre mayúsculas y minúsculas.
  • Cada comando debe estar en una línea separada. Un comando no puede ir seguido de una instrucción de Transact-SQL o de otro comando.
  • Los comandos se ejecutan inmediatamente. No se colocan en el búfer de ejecución, como es el caso de las instrucciones .
  • Editar comandos
  • [:] ED
    Inicia el editor de texto. Este editor se puede utilizar para editar el lote actual de Transact-SQL o el último lote ejecutado. Para editar el último lote ejecutado, el comando ED debe escribirse inmediatamente después de que se complete la ejecución del último lote.

    El editor de texto se define mediante la variable de entorno SQLCMDEDITOR. El editor predeterminado es "Edit". Para cambiar el editor, establezca la variable de entorno SQLCMDEDITOR. Por ejemplo, para establecer el editor en el Bloc de notas de Microsoft, en el símbolo del sistema, escriba:

    SET SQLCMDEDITOR=notepad

  • [:] RESET
    Borra la caché de instrucciones.
  • :List
    Imprime el contenido de la caché de instrucciones.
  • Variables
  • :Setvar <var> [ "value" ]
    Define las variables de secuencia de comandos de sqlcmd. Las variables de secuencia de comandos tienen el siguiente formato: $(VARNAME).

    Los nombres de variables no distinguen entre mayúsculas y minúsculas.

    Las variables de secuencia de comandos pueden establecerse de los siguientes modos:

    • Implícitamente mediante una opción de línea de comandos. Por ejemplo, la opción -l establece la variable SQLCMDLOGINTIMEOUT de sqlcmd.
    • Explícitamente mediante el comando :Setvar.
    • Al definir una variable de entorno antes de ejecutar sqlcmd.

    [!NOTA] La opción -X impide que las variables de entorno se pasen a sqlcmd.

    Si una variable definida mediante :Setvar y una variable de entorno tienen el mismo nombre, la variable definida mediante :Setvar tiene prioridad.

    Los nombres de variables no deben contener caracteres de espacio en blanco.

    Los nombres de variable no pueden tener el mismo formato que una expresión variable como $(var).

    Si el valor de la cadena de la variable de secuencia de comandos contiene espacios en blanco, incluya el valor entre comillas. Si un valor para la variable de la secuencia de comandos no se especifica, la variable de secuencia de comandos se elimina.

  • :Listvar
    Muestra una lista de variables de secuencias de comandos que están establecidas actualmente.

    [!NOTA] Sólo se mostrarán las variables de secuencia de comandos establecidas mediante sqlcmd y las variables establecidas con el comando :Setvar.

  • Comandos de salida
  • :Error **<filename>|STDERR|STDOUT
    Redirige toda la salida de error al archivo especificado por file name, a stderr o a stdout. El comando Error puede aparecer varias veces en una secuencia de comandos. De forma predeterminada, la salida de error se envía a stderr.

    • file name
      Crea y abre un archivo que recibirá la salida. Si el archivo ya existe, se truncará en cero bytes. Si el archivo no está disponible a causa de los permisos u otros motivos, la salida no se cambiará y se enviará al último destino especificado o al predeterminado.
    • STDERR
      Cambia la salida del error al flujo stderr. Si se ha redirigido, el destino al cual se redirige el flujo recibirá la salida del error.
    • STDOUT
      Cambia la salida del error al flujo stdout. Si se ha redirigido, el destino al cual se redirige el flujo recibirá la salida del error.
  • :Out <filename>| STDERR| STDOUT
    Crea y redirige todos los resultados de consulta al archivo especificado por file name, a stderr o a stdout. De forma predeterminada, la salida se envía a stdout. Si el archivo ya existe, se truncará en cero bytes. El comando Out puede aparecer varias veces en una secuencia de comandos.
  • :Perftrace <filename>| STDERR| STDOUT
    Crea y redirige toda la información de traza de rendimiento al archivo especificado por file name, a stderr o a stdout. De forma predeterminada, la salida de traza de rendimiento se envía a stdout. Si el archivo ya existe, se truncará en cero bytes. El comando Perftrace puede aparecer varias veces en una secuencia de comandos.
  • Comandos de control de ejecución
  • :On Error[ exit | ignore]
    Establece la acción que se llevará a cabo cuando se produzca un error durante la ejecución de la secuencia de comandos o del lote.

    Cuando se utiliza la opción exit, sqlcmd se cierra con el valor de error adecuado.

    Cuando se utiliza la opción ignore, sqlcmd pasa por alto el error y continúa con la ejecución del lote o de la secuencia de comandos. De forma predeterminada, se imprimirá un mensaje de error.

  • [:] QUIT
    Hace que sqlcmd se cierre.
  • [:] EXIT[ (statement) ]
    Permite utilizar el resultado de una instrucción SELECT como valor devuelto de sqlcmd. La primera columna de la primera fila del resultado 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 2000 pasa el entero de 4 bytes completo. La sintaxis es:

    :EXIT(query)

    Por ejemplo:

    :EXIT(SELECT @@ROWCOUNT)

    También puede incluir el parámetro EXIT como parte de un archivo de proceso por lotes. Por ejemplo, en el símbolo del sistema, escriba:

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

    La utilidad sqlcmd envía todo lo que está entre paréntesis () al servidor. Si un procedimiento almacenado del sistema selecciona un conjunto y devuelve un valor, sólo se devuelve la selección. La instrucción EXIT**()** sin nada entre los paréntesis ejecuta todo lo que precede a éstos en el lote y luego cierra sin ningún valor devuelto.

    Cuando se especifica una consulta incorrecta, sqlcmd se cierra sin devolver ningún valor.

    Aquí se muestra una lista de formatos de EXIT:

    • :EXIT

    No ejecuta el lote y, después, sale de forma inmediata 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 que incluye la consulta y, a continuación, sale tras devolver el resultado de la consulta.

    Si se utiliza RAISERROR en una secuencia de comandos de sqlcmd y se produce un estado 127, sqlcmd se cerrará y devolverá el identificador del mensaje al cliente. Por ejemplo:

    RAISERROR(50001, 10, 127)

    Este error hará que la secuencia de comandos de sqlcmd finalice y devuelva el Id. de mensaje 50001 al cliente.

    Los valores devueltos -1 a -99 están reservados por SQL Server; sqlcmd define los siguientes valores devueltos adicionales:

    Valores devueltos Descripción

    -100

    Error encontrado 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.

  • GO [count]
    GO marca tanto el final de un lote como la ejecución de cualquier instrucción de Transact-SQL almacenada en caché. Cuando especifique un valor para count, las instrucciones almacenadas en caché se ejecutarán tantas veces como indique count, como un solo lote.
  • Otros comandos
  • :r <filename>
    Analiza instrucciones Transact-SQL y comandos sqlcmd adicionales del archivo especificado por **<filename>****en la caché de instrucciones.

    Si el archivo contiene instrucciones que no van seguidas de GO, debe escribir GO en la línea que sigue a :r.

    [!NOTA] <filename> se lee de forma relativa al directorio de inicio en el que se ejecutó sqlcmd.

    El archivo se leerá y se ejecutará después de que se encuentre un terminador de lote. Puede emitir varios comandos :r. El archivo puede incluir cualquier comando de sqlcmd. Eso incluye el terminador de lote GO.

    [!NOTA] El recuento de líneas que se muestra en el modo interactivo aumentará en uno por cada comando :r que se encuentre. El comando :r aparecerá en la salida del comando de lista.

  • :Serverlist
    Enumera los servidores configurados localmente y los nombres de los servidores que difunden en la red.
  • :Connect server_name[**\**instance_name] [-l timeout] [-U user_name [-P password]]
    Conecta con una instancia de SQL Server. También cierra la conexión actual.

    Opciones de tiempo de espera:

    0

    espera indefinidamente

    n>0

    espera durante n segundos

    La variable de secuencia de comandos SQLCMDSERVER reflejará la conexión activa actual.

    Si no se especifica timeout, el valor de la variable SQLCMDLOGINTIMEOUT es el predeterminado.

    Si sólo se especifica el valor de user_name (como una opción o como una variable de entorno), se solicitará al usuario que especifique una contraseña. Esto no es así si se han establecido las variables de entorno SQLCMDUSER o SQLCMDPASSWORD. Si no se proporcionan opciones ni variables de entorno, se utiliza el modo de autenticación de Windows para iniciar sesión. Por ejemplo, para conectar con una instancia, instance1, de SQL Server, myserver, mediante seguridad integrada, se necesitaría lo siguiente:

    :connect myserver\instance1

    Para conectar con la instancia predeterminada de myserver con variables de secuencia de comandos, utilizaría lo siguiente:

    :setvar myusername test

    :setvar myservername myserver

    :connect $(myservername) $(myusername)

  • [:] !!< command>
    Ejecuta comandos del sistema operativo. Para ejecutar un comando del sistema operativo, inicie una línea con dos signos de exclamación (!!) seguidos por el comando del sistema operativo. Por ejemplo:

    :!! Dir

    [!NOTA] El comando se ejecuta en el equipo en el que se ejecuta sqlcmd.

  • :XML [ON | OFF]
    Para obtener más información, vea "Formato de salida XML", más adelante en este tema
  • :Help
    Muestra los comandos de sqlcmd junto con una breve descripción de cada comando.

Nombres de archivo de sqlcmd

Los archivos de entrada de sqlcmd se pueden especificar con la opción -i o con el comando :r. Los archivos de salida se pueden especificar con la opción -o o con los comandos :Error, :Out y :Perftrace. A continuación se incluyen algunas directrices para trabajar con estos archivos:

  • :Error, :Out y :Perftrace deben utilizar <filename> independientes. Si se utiliza el mismo <filename>, es posible que las entradas de los comandos se entremezclen.
  • Si sqlcmd llama a un archivo de entrada ubicado en un servidor remoto desde un equipo local y el archivo contiene una ruta de acceso de archivo del tipo :out c:\OutputFile.txt, el archivo de salida se creará en el equipo local y no en el servidor remoto.
  • Entre las rutas de archivo válidas se incluyen: C:\<filename>, \\<Servidor>\<recursoCompartido$>\<filename> y "C:\Carpeta\<file name>". Si hay algún espacio en blanco en la ruta de acceso, utilice comillas.
  • Cada nueva sesión de sqlcmd sobrescribirá los archivos existentes que tengan el mismo nombre.

Mensajes informativos

sqlcmd imprime los mensajes informativos enviados por el servidor. En el siguiente ejemplo, tras ejecutar las instrucciones de Transact-SQL, se imprime un mensaje informativo.

En el símbolo del sistema, escriba lo siguiente:

sqlcmd

En el símbolo del sistema, escriba sqlcmd:

USE AdventureWorks;

GO

Cuando se presiona ENTRAR, se imprime el siguiente mensaje informativo: "Se cambió el contexto de la base de datos a 'AdventureWorks'".

Formato de salida de consultas de Transact-SQL

sqlcmd primero imprime un encabezado de columna que contiene los nombres de columna especificados en la lista de selección. Los nombres de columna se separan mediante el carácter SQLCMDCOLSEP. De forma predeterminada, es un espacio en blanco. Si el nombre de la columna es más corto que el ancho de la columna, la salida se amplía con espacios hasta la siguiente columna.

Esta línea irá seguida por una línea separadora, que es una serie de caracteres de guión. La siguiente salida muestra un ejemplo.

Inicie sqlcmd. En el símbolo del sistema de sqlcmd, escriba lo siguiente:

USE AdventureWorks;

SELECT TOP (2) Person.ContactID, FirstName, LastName

FROM Person.Contact;

GO

Cuando presione ENTRAR, se devolverá el siguiente conjunto de resultados.

ContactID FirstName LastName

----------- ------------ ----------

1 Syed Abbas

2 Catherine Abel

(2 row(s) affected)

Aunque la columna ContactID tiene sólo 4 caracteres de ancho, se ha expandido para acomodar el nombre de columna más largo. De forma predeterminada, la salida finaliza a los 80 caracteres. Esto se puede cambiar mediante la opción -w o al establecer la variable de secuencia de comandos SQLCMDCOLWIDTH.

Formato de salida XML

La salida XML de una cláusula FOR XML se ofrece sin formato en una secuencia continua.

Cuando espere una salida XML, utilice el siguiente comando: :XML ON.

[!NOTA] sqlcmd devuelve mensajes de error en el formato habitual. Tenga en cuenta que los mensajes de error también salen en la secuencia de texto XML en formato XML. Con :XML ON, sqlcmd no muestra mensajes informativos.

Para desactivar el modo XML, utilice el siguiente comando: :XML OFF.

El comando GO no debe aparecer antes de que se emita el comando XML OFF, ya que el comando XML OFF vuelve a cambiar sqlcmd a la salida orientada a filas.

Los datos XML (de flujo) y los datos del conjunto de filas no se pueden mezclar. Si el comando XML ON no se ha emitido antes de ejecutar una instrucción Transact-SQL que genera flujos XML, la salida será confusa. Si se ha emitido el comando XML ON, no se pueden ejecutar instrucciones Transact-SQL que den como resultado conjuntos de filas normales.

[!NOTA] El comando :XML no admite la instrucción SET STATISTICS XML.

Prácticas recomendadas para sqlcmd

Utilice las siguientes prácticas para maximizar la seguridad y la eficacia.

  • Utilice seguridad integrada.
  • Utilice -X en entornos automatizados.
  • Asegure los archivos de entrada y salida mediante los permisos del sistema de archivos NTFS adecuados.
  • Para aumentar el rendimiento, haga tanto como pueda en una sola sesión de sqlcmd en vez de emplear varias.
  • Establezca valores de tiempo de espera para la ejecución de lotes y consultas superiores a los que prevea para la ejecución de cada lote o consulta.

Vea también

Otros recursos

Usar la utilidad sqlcmd
Usar sqlcmd con variables de secuencia de comandos
Cómo conectarse al motor de base de datos mediante sqlcmd.exe
Modificar secuencias de comandos SQLCMD con el Editor de consultas
Tutorial de la utilidad sqlcmd
Crear pasos de trabajo
Cómo crear un paso de trabajo CmdExec (SQL Server Management Studio)

Ayuda e información

Obtener ayuda sobre SQL Server 2005