Compartir a través de


cmdlet Invoke-Sqlcmd

Invoke-Sqlcmd es un cmdlet de SQL Server que ejecuta scripts que contienen instrucciones de los lenguajes (Transact-SQL y XQuery) y los comandos compatibles con la utilidad sqlcmd .

Uso de Invoke-Sqlcmd

El cmdlet Invoke-Sqlcmd le permite ejecutar los archivos de script sqlcmd en un entorno de Windows PowerShell. Gran parte de lo que puede hacer con sqlcmd también se puede hacer mediante Invoke-Sqlcmd.

Este es un ejemplo de llamada a Invoke-Sqlcmd para ejecutar una consulta simple, similar a especificar sqlcmd con las opciones -Q y -S :

Invoke-Sqlcmd -Query "SELECT GETDATE() AS TimeOfQuery;" -ServerInstance "MyComputer\MyInstance"  

Este es un ejemplo de llamada a Invoke-Sqlcmd, especificando un archivo de entrada y canalizando la salida a un archivo Esto es similar a especificar sqlcmd con las opciones -i y -o :

Invoke-Sqlcmd -InputFile "C:\MyFolder\TestSQLCmd.sql" | Out-File -FilePath "C:\MyFolder\TestSQLCmd.rpt"  

Este es un ejemplo del uso de una matriz de Windows PowerShell para pasar varias variables de scripting sqlcmd a Invoke-Sqlcmd. Los caracteres "$" que identifican las variables de scripting sqlcmd en la instrucción SELECT se han escapado mediante el carácter de escape "`" de comillas invertidas de PowerShell.

$MyArray = "MyVar1 = 'String1'", "MyVar2 = 'String2'"  
Invoke-Sqlcmd -Query "SELECT `$(MyVar1) AS Var1, `$(MyVar2) AS Var2;" -Variable $MyArray  

Este es un ejemplo del uso del proveedor de SQL Server para Windows PowerShell para ir a una instancia del motor de base de datos y, a continuación, usar el cmdlet Get-Item de Windows PowerShell para recuperar el objeto SMO Server para la instancia y pasarlo a Invoke-Sqlcmd:

Set-Location SQLSERVER:\SQL\MyComputer\MyInstance  
Invoke-Sqlcmd -Query "SELECT GETDATE() AS TimeOfQuery;" -ServerInstance (Get-Item .)  

El parámetro -Query es posicional y no tiene que denominarse. Si la primera cadena que se pasa a Invoke-Sqlcmd: no tiene nombre, se trata como el parámetro -Query.

Invoke-Sqlcmd "SELECT GETDATE() AS TimeOfQuery;" -ServerInstance "MyComputer\MyInstance"  

Contexto de directorio en Invoke-Sqlcmd

Si no usa el parámetro -Database, el contexto de la base de datos para Invoke-Sqlcmd se establece por la ruta activa en el momento de llamar al cmdlet.

Ruta Contexto de base de datos
Comienza con un dispositivo distinto al SQLSERVER: Base de datos predeterminada para el identificador de inicio de sesión en la instancia predeterminada del equipo local.
SQLSERVER:\SQL Base de datos predeterminada para el identificador de inicio de sesión en la instancia predeterminada del equipo local.
SQLSERVER:\SQL\ComputerName Base de datos predeterminada para el identificador de inicio de sesión en la instancia predeterminada del equipo especificado.
SQLSERVER:\SQL\NombreDeEquipo\NombreDeInstancia Base de datos predeterminada para el identificador de inicio de sesión de la instancia especificada en el equipo especificado.
SQLSERVER:\SQL\ComputerName\InstanceName\Databases Base de datos predeterminada para el identificador de inicio de sesión de la instancia especificada en el equipo especificado.
SQLSERVER:\SQL\ComputerName\InstanceName\Databases\DatabaseName Base de datos especificada en la instancia especificada del equipo especificado. Esto también se aplica a rutas de acceso más largas, como una ruta de acceso que especifica el nodo Tablas y columnas dentro de una base de datos.

Por ejemplo, supongamos que la base de datos por defecto de la cuenta de Windows en la instancia predeterminada del equipo local es master. A continuación, los siguientes comandos devolverían el maestro:

Set-Location SQLSERVER:\SQL  
Invoke-Sqlcmd "SELECT DB_NAME() AS DatabaseName;"  

Los siguientes comandos devolverían AdventureWorks2012:

Set-Location SQLSERVER:\SQL\MyComputer\DEFAULT\Databases\AdventureWorks2012\Tables\Person.Person  
Invoke-Sqlcmd "SELECT DB_NAME() AS DatabaseName;"  

Invoke-Sqlcmd proporciona una advertencia cuando usa el contexto de la base de datos de rutas. Puede usar el parámetro -SuppressProviderContextWarning para desactivar el mensaje de advertencia. Puede usar el parámetro -IgnoreProviderContext para indicar a Invoke-Sqlcmd usar siempre la base de datos predeterminada para el inicio de sesión.

Comparación de Invoke-Sqlcmd y la utilidad sqlcmd

Invoke-Sqlcmd se puede usar para ejecutar muchos de los scripts que se pueden ejecutar mediante la utilidad sqlcmd . Sin embargo, Invoke-Sqlcmd se ejecuta en un entorno de Windows PowerShell que es diferente del entorno de la línea de comandos en el que se ejecuta sqlcmd. El comportamiento de Invoke-Sqlcmd se ha modificado para funcionar en un entorno de Windows PowerShell.

No todos los comandos sqlcmd se implementan en Invoke-Sqlcmd. Los comandos que no se implementan incluyen lo siguiente: :!!, :connect, :error, :out, :ed, :list, :listvar, :reset, :perftrace e :serverlist.

Invoke-Sqlcmd no inicializa el entorno sqlcmd ni las variables de scripting, como SQLCMDDBNAME o SQLCMDWORKSTATION.

Invoke-Sqlcmd no muestra mensajes, como la salida de instrucciones PRINT, a menos que especifique el parámetro común Windows PowerShell -Verbose . Por ejemplo:

Invoke-Sqlcmd -Query "PRINT N'abc';" -Verbose  

No todos los parámetros sqlcmd son necesarios en un entorno de PowerShell. Por ejemplo, Windows PowerShell da formato a todos los resultados de los cmdlets, por lo que los parámetros sqlcmd que especifican opciones de formato no se implementan en Invoke-Sqlcmd. En la tabla siguiente se muestra la relación entre los parámetros Invoke-Sqlcmd y las opciones de sqlcmd :

Descripción opción sqlcmd parámetro Invoke-Sqlcmd
Nombre del servidor y de la instancia. -S -ServerInstance
Base de datos inicial que se va a usar. -d -Base de datos
Ejecute la consulta especificada y salga. -Q -Consulta
ID de inicio de sesión de autenticación del servidor SQL. -U -Nombre de usuario
Contraseña de autenticación de SQL Server. -P -Contraseña
Definición de variable. -v -Variable
Intervalo de tiempo de espera de consulta. -t -TiempoDeEsperaDeConsulta
Detener la ejecución en un error -b -AbortOnError
Conexión de administrador dedicada. -Un -DedicatedAdministratorConnection
Deshabilite los comandos interactivos, el script de inicio y las variables de entorno. -X -DeshabilitarComandos
Deshabilitar la sustitución de variables. -X -DesactivarVariables
Nivel mínimo de gravedad que debe notificarse. -V -SeverityLevel
Nivel mínimo de error a notificar. -M -ErrorLevel
Intervalo de tiempo de espera de inicio de sesión. -l -ConnectionTimeout
Nombre de host. -H -HostName
Cambiar contraseña y salir. -Z -NuevaContraseña
Archivo de entrada que contiene una consulta -i -Archivo de Entrada
Longitud máxima de la salida de caracteres. -w -MaxCharLength -Longitud máxima de caracteres
Longitud máxima de la salida binaria. -w -MaxBinaryLength
Conéctese mediante el cifrado SSL. Sin parámetro -EncryptConnection
Mostrar errores Sin parámetro -OutputSqlErrores
Envía mensajes a stderr. -r Sin parámetro
Usar la configuración regional del cliente -R Sin parámetro
Ejecute la consulta especificada y siga ejecutándose. -q Sin parámetro
Página de código que se va a usar para los datos de salida. -f Sin parámetro
Cambiar una contraseña y seguir funcionando -Z Sin parámetro
Tamaño del paquete -un Sin parámetro
Delimitador de columnas. -s Sin parámetro
Control de encabezados de salida -h Sin parámetro
Especificar caracteres de control -k Sin parámetro
Ancho de pantalla de longitud fija -Y Sin parámetro
Ancho de pantalla variable -y Sin parámetro
Entrada de eco -E Sin parámetro
Habilitación de identificadores entre comillas -Yo Sin parámetro
Quitar espacios finales -w Sin parámetro
Enumerar instancias -L Sin parámetro
Formatear la salida como Unicode -U Sin parámetro
Imprimir las estadísticas. -p Sin parámetro
Fin del comando -c Sin parámetro
Conexión mediante la autenticación de Windows -E Sin parámetro

Véase también

Utilizar los cmdlets del motor de base de datos
Utilidad sqlcmd
Usar la utilidad sqlcmd