Vous êtes sur la page 1sur 18

sqlcmd (utilidad)

La utilidad sqlcmd permite escribir instrucciones Transact-SQL , procedimientos del sistema y archivos de script en el smbolo del sistema, en el Editor de consultas en modo SQLCMD, en un archivo de script de Windows o en un paso de trabajo del sistema operativo (Cmd.exe) de un trabajo del Agente de SQL Server. Esta utilidad usa ODBC para ejecutar lotes de Transact-SQL.

Importante SQL Server Management Studio usa Microsoft .NET Framework SqlClient para la ejecucin en modo normal y SQLCMD en el Editor de consultas. Cuando sqlcmd se ejecuta desde la lnea de comandos, sqlcmd usa el controlador ODBC. Dado que se pueden aplicar diferentes opciones predeterminadas, podra obtener un comportamiento diferente al ejecutar la misma consulta en el modo SQLCMD de SQL Server Management Studio y en la utilidad sqlcmd.
Actualmente, sqlcmd no requiere un espacio entre la opcin de lnea de comandos y el valor. Sin embargo, en versiones futuras, se puede requerir un espacio entre la opcin de lnea de comandos y el valor.

Sintaxis
sqlcmd -a packet_size -A (dedicated administrator connection) -b (terminate batch job if there is an error) -c batch_terminator -C (trust the server certificate) -d db_name -e (echo input) -E (use trusted connection) -f codepage | i:codepage[,o:codepage] | o:codepage[,i:codepage] -h rows_per_header -H workstation_name -i input_file -I (enable quoted identifiers) -k[1 | 2] (remove or replace control characters) -K application_intent -l login_timeout -L[c] (list servers, optional clean output) -m error_level -M multisubnet_failover -N (encrypt connection) -o output_file -p[1] (print statistics, optional colon format) -P password -q "cmdline query" -Q "cmdline query" (and exit)

-r[0 | 1] (msgs to stderr) -R (use client regional settings) -s col_separator -S [protocol:]server[\instance_name][,port] -t query_timeout -u (unicode output file) -U login_id -v var = "value" -V error_severity_level -w column_width -W (remove trailing spaces) -x (disable variable substitution) -X[1] (disable commands, startup script, environment variables and optional exit) -y variable_length_type_display_width -Y fixed_length_type_display_width -z new_password -Z new_password (and exit) -? (usage)

Opciones de lnea de comandos


Opciones relacionadas con el inicio de sesin -A Inicia sesin en SQL Server con una Conexin de administrador dedicada (DAC). Este tipo de conexin se utiliza para solucionar problemas de un servidor. Solo funcionar con equipos servidores que admitan DAC. Si DAC no est disponible, sqlcmd genera un mensaje de error y, despus, se cierra. Para obtener ms informacin acerca de DAC, vea Conexin de diagnstico para administradores de bases de datos. -C Este modificador lo usa el cliente para configurarlo de forma que confe implcitamente en el certificado de servidor sin validacin. Esta opcin es equivalente a la opcin de ADO.NET TRUSTSERVERCERTIFICATE = true. -d db_name Emite una instruccin USE db_name cuando se inicia sqlcmd. Esta opcin establece la variable de scripting de sqlcmd SQLCMDDBNAME. Especifica la base de datos inicial. El valor predeterminado es la propiedad de base de datos predeterminada del inicio de sesin. Si la base de datos no existe, se genera un mensaje de error y sqlcmd se cierra. -l login_timeout Especifica el nmero de segundos que tienen que transcurrir antes de que un inicio de sesin de sqlcmden el proveedor ODBC agote el tiempo de espera cuando se intente conectar a un servidor. Esta opcin establece la variable de scripting de sqlcmd SQLCMDLOGINTIMEOUT. El tiempo de espera predeterminado para el inicio de sesin de sqlcmd es de ocho segundos. El perodo de tiempo de espera de inicio de sesin debe ser un nmero comprendido entre 0 y 65534. Si el valor proporcionado no es numrico o no est dentro de este intervalo, sqlcmd genera un mensaje de error. El valor 0 especifica que el tiempo de espera es infinito. -E Usa una conexin de confianza en lugar de usar un nombre de usuario y una contrasea para iniciar sesin en SQL Server. De manera predeterminada, si no se especifica E, sqlcmd usa la opcin de conexin de confianza.

La opcin -E omite la posible configuracin de la variable de entorno de nombre de usuario y contrasea, como SQLCMDPASSWORD. Si se usa la opcin -E junto con la opcin -U o -P, se genera un mensaje de error. -H workstation_name Un nombre de estacin de trabajo. Esta opcin establece la variable de scripting de sqlcmdSQLCMDWORKSTATION. El nombre de la estacin de trabajo se muestra en la columna hostname de la vista de catlogo sys.processes y se puede devolver mediante el procedimiento almacenado sp_who. Si no se especifica esta opcin, el nombre actual del equipo es el valor predeterminado. Este nombre se puede usar para identificar diferentes sesiones de sqlcmd. -K application_intent Declara el tipo de carga de trabajo de la aplicacin al conectarse a un servidor. El nico valor actualmente admitido es de solo lectura. Si no se especifica -K, la utilidad sqlcmd no admitir la conectividad con una rplica secundaria en un grupo de disponibilidad AlwaysOn. Para obtener ms informacin, veaSecundarias activas: rplicas secundarias legibles (grupos de disponibilidad AlwaysOn). -M multisubnet_failover Especifique siempre -M al conectarse a un agente de escucha de un grupo de disponibilidad de SQL Server 2012 o a una instancia de clster de conmutacin por error de SQL Server 2012. -M proporciona una deteccin ms rpida del servidor activo (actualmente) y una conexin al mismo. Si no se especifica M, -M est desactivado. Para obtener ms informacin acerca de Grupos de disponibilidad AlwaysOn, veaAgentes de escucha del grupo de disponibilidad, conectividad de cliente y conmutacin por error de una aplicacin (SQL Server), Creacin y configuracin de grupos de disponibilidad (SQL Server), Clster de conmutacin por error y grupos de disponibilidad de AlwaysOn (SQL Server) y Secundarias activas: rplicas secundarias legibles (grupos de disponibilidad AlwaysOn). -N Este modificador lo usa el cliente para solicitar una conexin cifrada. -P password Es una contrasea especificada por el usuario. En las contraseas se distingue entre maysculas y minsculas. Si se usa la opcin -U y no la opcin -P, y adems no se ha establecido la variable de entorno SQLCMDPASSWORD, sqlcmd solicita al usuario una contrasea. Si se usa la opcin -P al final del smbolo del sistema sin especificar ninguna contrasea, sqlcmd usa la contrasea predeterminada (NULL).

Nota de seguridad No utilice una contrasea en blanco. Utilice una contrasea segura. Para obtener ms informacin, veaContraseas seguras.
El mensaje de contrasea 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 posicin. La variable de entorno SQLCMDPASSWORD permite establecer una contrasea predeterminada para la sesin actual. Por lo tanto, las contraseas no tienen que estar codificadas de forma rgida en los archivos por lotes. En el siguiente ejemplo primero se establece la variable SQLCMDPASSWORD en el smbolo del sistema y, despus, se obtiene acceso a la utilidad sqlcmd. En el smbolo del sistema, escriba: SET SQLCMDPASSWORD= p@a$$w0rd

Nota de seguridad La contrasea ser visible para cualquiera que pueda ver el monitor del equipo.
En el siguiente smbolo del sistema, escriba: sqlcmd Si la combinacin de nombre de usuario y contrasea no es correcta, se genera 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 sqlcmd y osql se pueden usar una junto a la otra sin interferencias y que los scripts anteriores seguirn funcionando.
Si se usa la opcin -P junto con la opcin -E, se genera un mensaje de error. Si la opcin -P va seguida de ms de un argumento, se genera un mensaje de error y el programa se cierra. -S [protocol:]server[\instance_name][,port] Especifica la instancia de SQL Server a la que hay que conectarse. Establece la variable de scripting desqlcmd 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 ningn equipo, sqlcmd se conecta a la instancia predeterminada de SQL Server en el equipo local. Esta opcin es necesaria si se ejecuta sqlcmd desde un equipo remoto conectado a la red. protocol puede ser tcp (TCP/IP), lpc (memoria compartida) o np (canalizaciones con nombre). Si no especifica server_name [ \instance_name ] al iniciar sqlcmd, SQL Server comprueba si existe la variable de entorno SQLCMDSERVER y la usa.

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 quesqlcmd y osql se pueden usar una junto a la otra sin interferencias y que los scripts anteriores seguirn funcionando.
-U login_id Es el identificador de inicio de sesin 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 quesqlcmd y osql se pueden usar una junto a la otra sin

interferencias. Tambin significa que los scriptsosql existentes seguirn funcionando.


Si no se especifica la opcin -U ni la opcin -P, sqlcmd intenta conectarse mediante el modo de autenticacin de Microsoft Windows. La autenticacin se basa en la cuenta de Windows del usuario que est ejecutando sqlcmd. Si se usa la opcin -U junto con la opcin -E (descrita ms adelante en este tema), se genera un mensaje de error. Si la opcin U va seguida de ms de un argumento, se genera un mensaje de error y el programa se cierra. -z new_password Cambiar contrasea: sqlcmd -U someuser -P s0mep@ssword -z a_new_p@a$$w0rd -Z new_password Cambiar contrasea y salir: sqlcmd -U someuser -P s0mep@ssword -Z a_new_p@a$$w0rd Input/Output Options -f codepage | i:codepage[,o:codepage] | o:codepage[,i:codepage] Especifica las pginas de cdigos de entrada y de salida. El nmero de pgina de cdigos es un valor numrico que especifica una pgina de cdigos instalada en Windows. Reglas de conversin de pginas de cdigos: Si no se especifica ninguna pgina de cdigos, sqlcmd usar la pgina de cdigos 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 conversin. sqlcmd reconoce automticamente los archivos de entrada Unicode "big endian" y "little endian". Si se ha especificado la opcin -u, la salida siempre ser Unicode "little endian". Si no se especifica ningn archivo de salida, la pgina de cdigos de salida ser la pgina de cdigos 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 pgina de cdigos. Los archivos de entrada Unicode y no Unicode pueden ser mixtos. Escriba chcp en el smbolo del sistema para comprobar la pgina de cdigos de Cmd.exe. -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 leern y se procesarn en orden. No use ningn espacio entre los nombres de archivo. sqlcmd comprobar primero si todos los archivos especificados existen. Si uno o ms 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:\Una carpeta\<nombreDeArchivo>" Las rutas de acceso a archivos que contengan espacios deben escribirse entre comillas. Esta opcin se puede usar ms de una vez: -iinput_file -II input_file. -o output_file Identifica el archivo que recibe la salida de sqlcmd. Si se especifica -u, el archivo especificado en output_file se almacena en formato Unicode. Si el nombre de archivo no es vlido, se genera un mensaje de error y sqlcmd se cierra. sqlcmd no admite la escritura simultnea de varios procesos

de sqlcmd en el mismo archivo. El archivo de salida estar daado o ser incorrecto. Vea el modificador -f para obtener ms informacin acerca de los formatos de archivo. Este archivo se crear si no existe. Se sobrescribir cualquier archivo con el mismo nombre que pertenezca a una sesin de sqlcmd anterior. El archivo que se especifica aqu no es el archivo stdout. Si se especifica un archivo stdout, este archivo no se usar. Ejemplos de rutas de acceso: -o C:\< nombreDeArchivo> -o \\<Servidor>\<RecursoCompartido$>\<nombreDeArchivo> -o "C:\Una carpeta\<nombreDeArchivo>" Las rutas de acceso a archivos que contengan espacios deben escribirse entre comillas. -r[0 | 1] Redirige la salida del mensaje de error a la pantalla (stderr). Si no especifica ningn parmetro o si especifica 0, solo se redirigirn los mensajes de error con un nivel de gravedad 11 o superior. Si especifica1, toda salida de mensaje, incluida PRINT, se redirigir. No surte efecto si se usa -o. De forma predeterminada, los mensajes se envan a stdout. -R Hace que sqlcmd localice las columnas numericas, de moneda, fecha y hora recuperadas de SQL Server basndose en la configuracin regional del cliente. De forma predeterminada, estas columnas se muestran con la configuracin regional del servidor. -u Especifica que output_file se almacena en formato Unicode, independientemente del formato de input_file. Opciones de ejecucin de consultas -e Escribe scripts de entrada en el dispositivo de salida estndar (stdout). -I Activa (establece en ON) la opcin de conexin SET QUOTED_IDENTIFIER. De forma predeterminada, la opcin est establecida en OFF. Para obtener ms informacin, vea SET QUOTED_IDENTIFIER (Transact-SQL). -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 smbolo del sistema, escriba: sqlcmd -d AdventureWorks2012 -q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';" sqlcmd -d AdventureWorks2012 -q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"

Importante No use el terminador GO en la consulta.


Si se especifica -b junto con esta opcin, sqlcmd se cierra en caso de error. -b se describe ms adelante en este tema. -Q " cmdline query " Ejecuta una consulta cuando se inicia sqlcmd e inmediatamente despus 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 smbolo del sistema, escriba: sqlcmd -d AdventureWorks2012 -Q "SELECT FirstName, LastName FROM Person.Person WHERE LastName LIKE 'Whi%';" sqlcmd -d AdventureWorks2012 -Q "SELECT TOP 5 FirstName FROM Person.Person;SELECT TOP 5 LastName FROM Person.Person;"

Importante No use el terminador GO en la consulta.


Si se especifica -b junto con esta opcin, sqlcmd se cierra en caso de error. -b se describe ms adelante en este tema. -t query_timeout Especifica el nmero de segundos que tienen que transcurrir antes de que un comando (o la instruccin de SQL) exceda el tiempo de espera. Esta opcin establece la variable de scripting de sqlcmdSQLCMDSTATTIMEOUT. Si no se especifica ningn valor para time_out, el comando no tiene tiempo de espera. query time_out debe ser un nmero comprendido entre 1 y 65534. Si el valor proporcionado no es numrico 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.
-v var = value[ var = value...] Crea una variable de scripting de sqlcmdque se puede usar en un script de sqlcmd. Si el valor contiene espacios en blanco, especifquelo entre comillas. Puede especificar varios valores var="values". Si hay errores en alguno de los valores especificados, sqlcmd genera un mensaje de error y despus se cierra. sqlcmd -v MyVar1=something MyVar2="some thing" sqlcmd -v MyVar1=something -v MyVar2="some thing" -x Hace que sqlcmd omita las variables de scripting. Es til cuando un script contiene muchas instrucciones INSERT que pueden contener cadenas con el mismo formato que las variables normales, por ejemplo, $(variable_name). Opciones de formato -h headers Especifica el nmero 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 opcin establece la variable de scripting de sqlcmd SQLCMDHEADERS. Use -1 para especificar que no desea imprimir los encabezados. Cualquier valor no vlido har que sqlcmd genere un mensaje de error y se cierre. -k [1 | 2] Quita todos los caracteres de control, como tabulaciones y nuevos caracteres de lnea 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. -k equivale a -k1. -s col_separator

Especifica el carcter separador de columnas. El valor predeterminado es un espacio en blanco. Esta opcin establece la variable de scripting 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 carcter entre comillas ("). El separador de columnas puede ser cualquier carcter de 8 bits. -w column_width Especifica el ancho de pantalla para la salida. Esta opcin establece la variable de scripting de sqlcmdSQLCMDCOLWIDTH. El ancho de columna debe ser un nmero mayor que 8 y menor que 65536. Si el ancho de columna especificado no est en ese intervalo, sqlcmd generar un mensaje de error. El ancho predeterminado es 80 caracteres. Cuando la lnea de salida supera el ancho de columna especificado, se ajusta a la siguiente lnea. -W Esta opcin quita los espacios finales de una columna. Use esta opcin junto con la opcin -s cuando prepare datos que se vayan a exportar a otra aplicacin. No se puede usar con las opciones -y ni -Y. -y variable_length_type_display_width Establece la variable de scripting de sqlcmd SQLCMDMAXFIXEDTYPEWIDTH. El valor predeterminado es 256. Limita el nmero de caracteres que se devuelve para tipos de datos de longitud variable y gran tamao: varchar(max) nvarchar(max) varbinary(max) xml UDT (user-defined data types) text ntext image

Nota Los UDT pueden ser de longitud fija, en funcin de la implementacin. Si esta longitud de un UDT de longitud fija es ms 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.

Importante Use la opcin -y 0 con mucha precaucin, ya que puede causar graves problemas de rendimiento en el servidor y en la red, segn el tamao de los datos devueltos.
-Y fixed_length_type_display_width Establece la variable de scripting de sqlcmd SQLCMDMAXVARTYPEWIDTH. El valor predeterminado es 0 (ilimitado). Limita el nmero de caracteres que se devuelve para los siguientes tipos de datos: char( n ) , donde 1<=n<=8000 nchar(n n ) , donde 1<=n<=4000 varchar(n n ) , donde 1<=n<=8000 nvarchar(n n ) , donde 1<=n<=4000

varbinary(n n ) , donde 1<=n<=4000 variant Opciones de informes de errores -b Especifica que sqlcmd se cierre y devuelva un valor de DOS ERRORLEVEL cuando se produce 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 opcin -V adems de b, sqlcmd no notificar un error si el nivel de gravedad es inferior a los valores establecidos mediante -V. Los archivos por lotes del smbolo del sistema pueden probar el valor de ERRORLEVEL y controlar el error apropiadamente. sqlcmd no notifica los mensajes de error con un nivel de gravedad de 10 (mensajes informativos). Si el script de sqlcmd contiene un comentario incorrecto, un error de sintaxis o carece de una variable de scripting, el valor de ERRORLEVEL devuelto es 1. -m error_level Controla qu mensajes de error se envan a stdout. Se envan los mensajes que tienen un nivel de gravedad mayor o igual que este nivel. Cuando este valor se establece en -1, se envan todos los mensajes, incluidos los informativos. No se permiten espacios entre -m y -1. Por ejemplo, -m-1 es vlido, pero -m-1no lo es. Esta opcin tambin establece la variable de scripting de sqlcmd SQLCMDERRORLEVEL. El valor predeterminado de esta variable es 0. -V error_severity_level Controla el nivel de gravedad que se usa para establecer la variable ERRORLEVEL. Los mensajes de error que tienen niveles de gravedad mayores o iguales que este valor establecen ERRORLEVEL. Los valores menores que 0 se notifican como 0. Los archivos CMD y por lotes se pueden usar para probar el valor de la variable ERRORLEVEL. Otras opciones -a packet_size Solicita un paquete de un tamao diferente. Esta opcin establece la variable de scripting de sqlcmdSQLCMDPACKETSIZE. packet_size debe ser un valor entre 512 y 32767. El valor predeterminado es 4096. Un tamao de paquete mayor puede mejorar el rendimiento de la ejecucin de scripts que comprenden gran cantidad de instrucciones de SQL entre los comandos GO. Puede solicitar un tamao de paquete mayor.No obstante, si se deniega la solicitud, sqlcmd usa el valor predeterminado de servidor para el tamao de paquete. -c batch_terminator Especifica el terminador del lote. De forma predeterminada, los comandos se terminan y se envan a SQL Server escribiendo la palabra "GO" en una lnea aparte. Cuando restablezca el terminador del lote, no use palabras reservadas de Transact-SQL ni caracteres especiales que tengan un significado especial para el sistema operativo, incluso aunque vayan precedidos de una barra diagonal invertida. -L[c] Enumera los equipos servidores configurados localmente y los nombres de los equipos servidores que difunden en la red. Este parmetro no se puede usar en combinacin con otros parmetros. El nmero mximo de equipos de servidor que se puede enumerar es 3000. Si la lista de servidor se trunca debido al tamao del bfer, aparece un mensaje de advertencia.

Nota

Debido a la naturaleza de las difusiones en las redes, sqlcmd podra no recibir una respuesta de todos los servidores a tiempo. Por lo tanto, la lista de servidores devuelta puede variar en cada invocacin de esta opcin.
Si se especifica el parmetro opcional c, la salida aparece sin lo servidores: la lnea de encabezado y cada lnea de servidor se muestra sin espacios iniciales. Esto se denomina salida limpia. La salida limpia mejora el rendimiento del procesamiento de los lenguajes de scripting. -p[1] Imprime estadsticas de rendimiento para cada conjunto de resultados. A continuacin se muestra un ejemplo del formato para las estadsticas 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 nmero de transacciones que procesa SQL Server. t1 indica el tiempo total de todas las transacciones. t2 indica el tiempo medio de una nica transaccin. t3 indica el nmero medio de transacciones por segundo. Todos los tiempos se indican en milisegundos. Si se especifica el parmetro opcional 1, el formato de salida de las estadsticas es el separado por dos puntos, que se puede importar fcilmente en una hoja de clculo o se puede procesar en un script. Si el parmetro opcional tiene cualquier valor distinto de 1, se genera un error y sqlcmd se cierra. -X[1] Deshabilita los comandos que pueden poner en peligro la seguridad del sistema cuando se ejecutasqlcmd desde un archivo por lotes. Los comandos deshabilitados se siguen reconociendo; sqlcmd emite un mensaje de advertencia y sigue ejecutndose. Si se especifica el parmetro opcional 1, sqlcmd genera un mensaje de error y despus se cierra. Los siguientes comandos se deshabilitan cuando se usa la opcin-X: ED !! command Si se especifica la opcin -X, eso evita que se pasen variables de entorno a sqlcmd. Tambin impide que el script de inicio especificada mediante la variable de scripting SQLCMDINI se ejecute. Para obtener ms informacin acerca de las variables de scripting de sqlcmd, vea Usar sqlcmd con variables de script. -? Muestra el resumen de la sintaxis de las opciones de sqlcmd.

Comentarios
Las opciones no tienen que utilizarse forzosamente en el orden mostrado en la seccin de sintaxis. Cuando se devuelven varios resultados, sqlcmd imprime una lnea en blanco entre cada conjunto de resultados de un lote. Adems, el mensaje "<x> filas afectadas" no aparece cuando no se aplica a la instruccin ejecutada. Para usar sqlcmd de forma interactiva, escriba sqlcmd en el smbolo del sistema con una o varias de las opciones descritas anteriormente en este tema. Para obtener ms informacin, vea Usar la utilidad sqlcmd.

Nota Las opciones -L, -Q, -Z o -i hacen que sqlcmd se cierre despus de la ejecucin.
La longitud total de la lnea de comandos de 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.

Precedencia de variables (menor a mayor)


1. 2. 3. 4. 5. Variables de entorno de nivel de sistema. Variables de entorno de nivel de usuario. El shell de comandos (SET X=Y) se establece en el smbolo del sistema antes de ejecutar sqlcmd. sqlcmd -v X=Y :Setvar X Y

Nota Para ver las variables de entorno, en el Panel de control, abra Sistema y haga clic en la pestaa Opciones avanzadas.

Variables de scripting de sqlcmd


Variable SQLCMDUSER SQLCMDPASSWORD SQLCMDSERVER SQLCMDWORKSTATION SQLCMDDBNAME SQLCMDLOGINTIMEOUT SQLCMDSTATTIMEOUT Modificador relacionado -U -P -S -H -d -l -t L/E L -L L L L/E L/E Valor predeterminado "" "" "DefaultLocalInstance" "ComputerName" "" "8" (segundos) "0" = esperar indefinidamente "0" "" "0"

SQLCMDHEADERS SQLCMDCOLSEP SQLCMDCOLWIDTH

-h -s -w

L/E L/E L/E

SQLCMDPACKETSIZE SQLCMDERRORLEVEL SQLCMDMAXVARTYPEWIDTH SQLCMDMAXFIXEDTYPEWIDTH SQLCMDEDITOR SQLCMDINI

-a -m -y -Y

L L/E L/E L/E L/E L

"4096" 0 "256" "0" = ilimitado "edit.com" ""

SQLCMDUSER, SQLCMDPASSWORD y SQLCMDSERVER se establecen cuando se usa :Connect . L indica que el valor solo puede establecerse una vez durante la inicializacin del programa. L/E indica que el valor puede modificarse mediante el comando setvar y que los comandos siguientes se vern influidos por el nuevo valor.

Comandos de sqlcmd
Adems de las instrucciones Transact-SQL de sqlcmd, tambin estn disponibles los siguientes comandos:

GO [recuento] [:] RESET [:] ED [:] !! [:] QUIT [:] EXIT :r :ServerList :Setvar

:List :Error :Out :Perftrace :Connect :On Error :Help :XML [ON | OFF] :Listvar

Tenga en cuenta lo siguiente cuando use comandos de sqlcmd: Todos los comandos de sqlcmd, excepto GO, deben ir precedidos de dos puntos (:).

Importante Para mantener la compatibilidad con los scripts de osql existentes, algunos de los comandos se reconocern sin los dos puntos. Esto est indicado por [:].
Los comandos de sqlcmd se reconocen solo si aparecen al principio de una lnea.

Los comandos de sqlcmd no distinguen entre maysculas y minsculas. Cada comando debe estar en una lnea separada. Un comando no puede ir seguido de una instruccin de Transact-SQL o de otro comando. Los comandos se ejecutan inmediatamente. No se colocan en el bfer de ejecucin, como es el caso de las instrucciones Transact-SQL. 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 despus de que se complete la ejecucin 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 smbolo del sistema, escriba: SET SQLCMDEDITOR=notepad [:] RESET Borra la cach de instrucciones. :List Imprime el contenido de la memoria cach de instrucciones. Variables :Setvar <var> [ "value" ] Define las variables de scripting de sqlcmd. Las variables de scripting tienen el siguiente formato:$(VARNAME). Los nombres de variables no distinguen entre maysculas y minsculas. Las variables de scripting pueden establecerse de los siguientes modos: Implcitamente mediante una opcin de lnea de comandos. Por ejemplo, la opcin -l establece la variable de sqlcmd SQLCMDLOGINTIMEOUT. Explcitamente mediante el comando :Setvar. Al definir una variable de entorno antes de ejecutar sqlcmd.

Nota La opcin -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 expresin variable como $(var). Si el valor de la cadena de la variable de script contiene espacios en blanco, incluya el valor entre comillas.Si un valor para la variable del script no se especifica, la variable de script se elimina. :Listvar Muestra una lista de variables de scripting que estn establecidas actualmente.

Nota Solo se mostrarn las variables de scripting 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 comandoError puede aparecer varias veces en un script. De forma predeterminada, la salida de error se enva astderr. 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 enva a stdout. Si el archivo ya existe, se truncar en cero bytes. El comando Out puede aparecer varias veces en un script. :Perftrace < filename >| STDERR| STDOUT Crea y redirige toda la informacin de seguimiento de rendimiento al archivo especificado por file name, astderr o a stdout. De forma predeterminada, la salida de seguimiento de rendimiento se enva a stdout. Si el archivo ya existe, se truncar en cero bytes. El comando Perftrace puede aparecer varias veces en un script. Comandos de control de ejecucin :On Error[ exit | ignore] Establece la accin que se llevar a cabo cuando se produzca un error durante la ejecucin del script o del lote. Cuando se usa la opcin exit, sqlcmd se cierra con el valor de error correspondiente. Cuando se usa la opcin ignore, sqlcmd pasa por alto el error y contina con la ejecucin del lote o del script. De forma predeterminada, se imprimir un mensaje de error. [:] QUIT Hace que sqlcmd se cierre. [:] EXIT[ (statement) ] Permite usar el resultado de una instruccin SELECT como valor devuelto de sqlcmd. Si es numrica, la primera columna de la ltima 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 200x pasa el entero de 4 bytes completo. La sintaxis es: :EXIT(query) Por ejemplo: :EXIT(SELECT @@ROWCOUNT) Tambin puede incluir el parmetro EXIT como parte de un archivo por lotes. Por ejemplo, en el smbolo del sistema, escriba: sqlcmd -Q "EXIT(SELECT COUNT(*) FROM '%1')" La utilidad sqlcmd enva todo lo que est entre parntesis () al servidor. Si un procedimiento almacenado del sistema selecciona un conjunto y devuelve un valor, solo se devuelve la seleccin. La instruccin EXIT()sin nada entre los parntesis ejecuta todo lo que precede a estos en el lote y, a continuacin, se cierra sin ningn valor devuelto. Cuando se especifica una consulta incorrecta, sqlcmd se cierra sin devolver ningn valor.

Aqu se muestra una lista de formatos de EXIT: :EXIT No ejecuta el lote y, despus, sale de forma inmediata y no devuelve ningn valor. :EXIT( ) Ejecuta el lote y, a continuacin, sale sin devolver ningn valor. :EXIT(query) Ejecuta el lote que incluye la consulta y, a continuacin, se cierra tras devolver el resultado de la consulta. Si se usa RAISERROR en un script de sqlcmd y se genera el estado 127, sqlcmd se cerrar y devolver un identificador de mensaje al cliente. Por ejemplo: RAISERROR(50001, 10, 127) Este error har que el script de sqlcmd finalice y devuelva el identificador de mensaje 50001 al cliente. Los valores devueltos -1 a -99 estn reservados para SQL Server; sqlcmd define los siguientes valores devueltos adicionales:

Valores devueltos -100 -101 -102

Descripcin Error encontrado antes de seleccionar el valor devuelto. No se encontr ninguna fila al seleccionar el valor devuelto. Error de conversin al seleccionar el valor devuelto.

GO [count] GO marca tanto el final de un lote como la ejecucin de cualquier instruccin de Transact-SQL almacenada en cach. Cuando especifique un valor para count, las instrucciones almacenadas en cach se ejecutarn tantas veces como indique count, como un solo lote. Otros comandos :r < filename > Analiza instrucciones Transact-SQL y comandos sqlcmd adicionales desde el archivo especificado por<filename> en la memoria cach de instrucciones. Si el archivo contiene instrucciones Transact-SQL que no van seguidas de GO, debe escribir GO en la lnea 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 despus 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 lneas que se muestra en el modo interactivo aumentar en uno por cada comando :rque 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. Tambin cierra la conexin actual. Opciones de tiempo de espera:

0 n>0

espera indefinidamente espera durante n segundos

La variable de scripting SQLCMDSERVER reflejar la conexin activa actual. Si no se especifica timeout, el valor de la variable SQLCMDLOGINTIMEOUT es el predeterminado. Si solo se especifica user_name (como opcin o como variable de entorno), se solicitar al usuario que especifique una contrasea. 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 iniciar sesin en modo Autenticacin de Windows. Por ejemplo, para conectar con una instancia, instance1, de SQL Server,myserver, mediante seguridad integrada, se necesitara lo siguiente: :connect myserver\instance1 Para conectar con la instancia predeterminada de myserver con variables de script, utilizara 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 lnea con dos signos de exclamacin (!!) 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 ms informacin, vea "Formato de salida XML", ms adelante en este tema :Help Muestra los comandos de sqlcmd junto con una breve descripcin de cada comando.

Nombres de archivo de sqlcmd


Los archivos de entrada de sqlcmd se pueden especificar con la opcin -i o con el comando :r. Los archivos de salida se pueden especificar con la opcin -o o con los comandos :Error, :Out y :Perftrace. A continuacin se incluyen algunas directrices para trabajar con estos archivos: :Error, :Out y :Perftrace deben usar valores de <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:\archivoDeSalida.txt. el archivo de salida se crear en el equipo local y no en el servidor remoto.

Entre las rutas de archivo vlidas se incluyen: C:\<filename>, \\<Servidor>\<RecursoCompartido$>\<filename> y "C:\Una carpeta\<file name>". Si hay algn espacio en blanco en la ruta de acceso, use comillas. Cada nueva sesin 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 smbolo del sistema, escriba lo siguiente: sqlcmd At the sqlcmd prompt type: USE AdventureWorks2012; GO Cuando se presiona ENTRAR, se imprime el siguiente mensaje informativo: "Se cambi el contexto de la base de datos a 'AdventureWorks2008R2'".

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 seleccin. Los nombres de columna se separan mediante el carcter SQLCMDCOLSEP. De forma predeterminada, es un espacio en blanco. Si el nombre de la columna es ms corto que el ancho de la columna, la salida se rellena con espacios hasta la siguiente columna. Esta lnea ir seguida de una lnea separadora, que es una serie de caracteres de guin. La siguiente salida muestra un ejemplo. Inicie sqlcmd. En el smbolo del sistema de sqlcmd, escriba lo siguiente: USE AdventureWorks2012; SELECT TOP (2) BusinessEntityID, FirstName, LastName FROM Person.Person; GO Cuando presione ENTRAR, se devolver el siguiente conjunto de resultados. BusinessEntityID FirstName LastName ---------------- ------------ ---------285 Syed Abbas 293 Catherine Abel (2 row(s) affected) Aunque la columna BusinessEntityID tiene solo 4 caracteres de ancho, se ha expandido para acomodar el nombre de columna ms largo. De forma predeterminada, la salida finaliza a los 80 caracteres. Esto se puede cambiar mediante la opcin -w o al establecer la variable de scripting SQLCMDCOLWIDTH.

Formato de salida XML


La salida XML de una clusula FOR XML se ofrece sin formato en un flujo continuo. Cuando espere una salida XML, use el siguiente comando: :XML ON.

Nota sqlcmd devuelve mensajes de error en el formato habitual. Tenga en cuenta que los mensajes de error tambin salen en el flujo de texto XML en formato XML. Con :XML ON, sqlcmd no muestra mensajes informativos.
Para desactivar el modo XML, use 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 instruccin 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 instruccin SET STATISTICS XML.

Prcticas recomendadas para sqlcmd


Use las siguientes prcticas para maximizar la seguridad y la eficacia. Use seguridad integrada. Use -X en los entornos automatizados. Proteja 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 sesin de sqlcmd en vez de emplear varias. Establezca valores de tiempo de espera para la ejecucin de lotes y consultas superiores a los que prevea para la ejecucin de cada lote o consulta.

Fuente http://msdn.microsoft.com/es-es/library/ms162773.aspx