cmdlet Invoke-Sqlcmd
Invoke-Sqlcmd es un cmdlet de SQL Server que ejecuta scripts que contienen instrucciones de los lenguajes y comandos admitidos por la utilidad sqlcmd (Transact-SQL y XQuery).
Usar Invoke-Sqlcmd
El cmdlet Invoke-Sqlcmd permite ejecutar archivos de script sqlcmd en un entorno de Windows PowerShell. Invoke-Sqlcmd permite llevar a cabo una gran parte de lo que se puede hacer con sqlcmd.
A continuación se muestra un ejemplo en el que se llama 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"
A continuación se muestra un ejemplo de cómo llamar a Invoke-Sqlcmd, que especifica un archivo de entrada y canaliza 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 de sqlcmd a Invoke-Sqlcmd. El escape de los caracteres "$" que identifican las variables de scripting de sqlcmd en la instrucción SELECT se ha realizado mediante el carácter de escape de acento invertido "`" 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 navegar a una instancia de Motor de base de datos y, a continuación, usar el cmdlet Get-Item de Windows PowerShell para recuperar el objeto del servidor SMO de 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 es necesario asignarle un nombre. 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 la ruta de acceso en Invoke-Sqlcmd
Si no utiliza el parámetro -Database, el contexto de base de datos para Invoke-Sqlcmd se establece mediante la ruta de acceso que está activa cuando se llama al cmdlet.
Ruta de acceso |
Contexto de base de datos |
---|---|
Empieza con una unidad diferente de SQLSERVER: |
La base de datos predeterminada para el identificador de inicio de sesión en la instancia predeterminada del equipo local. |
SQLSERVER:\SQL |
La base de datos predeterminada para el identificador de inicio de sesión en la instancia predeterminada del equipo local. |
SQLSERVER:\SQL\nombreDeEquipo |
La base de datos predeterminada para el identificador de inicio de sesión en la instancia predeterminada del equipo especificado. |
SQLSERVER:\SQL\nombreDeEquipo\nombreDeInstancia |
La base de datos predeterminada para el identificador de inicio de sesión en la instancia especificada del equipo especificado. |
SQLSERVER:\SQL\nombreDeEquipo\nombreDeInstancia\Bases de datos |
La base de datos predeterminada para el identificador de inicio de sesión en la instancia especificada del equipo especificado. |
SQLSERVER:\SQL\nombreDeEquipo\nombreDeInstancia\Bases de datos\nombreDeBaseDeDatos |
La base de datos especificada en la instancia especificada del equipo especificado. Esto también es aplicable a rutas de acceso más largas, como una que especifique el nodo de tablas y columnas en una base de datos. |
Por ejemplo, suponga que la base de datos predeterminada para su cuenta de Windows en la instancia predeterminada del equipo local es master. Los comandos siguientes devolverían master:
Set-Location SQLSERVER:\SQL
Invoke-Sqlcmd "SELECT DB_NAME() AS DatabaseName;"
Los comandos siguientes devolverían AdventureWorks2012 :
Set-Location SQLSERVER:\SQL\MyComputer\DEFAULT\Databases\AdventureWorks2012\Tables\Person.Person
Invoke-Sqlcmd "SELECT DB_NAME() AS DatabaseName;"
Invoke-Sqlcmd muestra una advertencia cuando utiliza el contexto de base de datos establecido mediante la ruta de acceso. Puede utilizar el parámetro -SuppressProviderContextWarning para desactivar el mensaje de advertencia. Puede usar el parámetro -IgnoreProviderContext para indicar a Invoke-Sqlcmd que use siempre la base de datos predeterminada para el inicio de sesión.
Diferencias entre Invoke-Sqlcmd y la utilidad sqlcmd
Invoke-Sqlcmd se puede usar para ejecutar muchos de los scripts que se pueden ejecutar con la utilidad sqlcmd. Sin embargo, Invoke-Sqlcmd se ejecuta en un entorno de Windows PowerShell que es diferente del entorno del símbolo del sistema en el que se ejecuta sqlcmd. El comportamiento de Invoke-Sqlcmd se ha modificado para que funcione en un entorno de Windows PowerShell.
No todos los comandos de sqlcmd se implementan en Invoke-Sqlcmd. Entre los comandos que no se implementan se incluyen los siguientes: :!!, :connect, :error, :out, :ed, :list, :listvar, :reset, :perftrace y :serverlist.
Invoke-Sqlcmd no inicializa el entorno de sqlcmd ni las variables de scripting como SQLCMDDBNAME o SQLCMDWORKSTATION.
Invoke-Sqlcmd no muestra mensajes, como la salida de las instrucciones PRINT, a menos que se especifique el parámetro común de Windows PowerShell -Verbose. Por ejemplo:
Invoke-Sqlcmd -Query "PRINT N'abc';" -Verbose
No todos los parámetros de sqlcmd son necesarios en un entorno de PowerShell. Por ejemplo, Windows PowerShell da formato a toda la salida de los cmdlets, de modo que los parámetros de sqlcmd que especifican las opciones de formato no se implementan en Invoke-Sqlcmd. En la tabla siguiente se muestra la relación entre los parámetros de Invoke-Sqlcmd y las opciones de sqlcmd:
Descripción |
Opción sqlcmd |
Parámetro de Invoke-Sqlcmd |
---|---|---|
Nombre de servidor e instancia. |
-S |
-ServerInstance |
Base de datos inicial que se utilizará. |
-d |
-Database |
Ejecutar la consulta especificada y salir. |
-Q |
-Query |
Identificador de inicio de sesión para la autenticación de SQL Server. |
-U |
-Username |
Contraseña para la autenticación de SQL Server. |
-P |
-Password |
Definición de variable. |
-v |
-Variable |
Consultar el intervalo de tiempo de espera. |
-t |
-QueryTimeout |
Detener la ejecución cuando se produce un error. |
-b |
-AbortOnError |
Conexión de administrador dedicada. |
-A |
-DedicatedAdministratorConnection |
Deshabilitar comandos interactivos, script de inicio y variables de entorno. |
-X |
-DisableCommands |
Deshabilitar la sustitución de variables. |
-x |
-DisableVariables |
Nivel de gravedad mínimo que se ha de notificar. |
-V |
-SeverityLevel |
Nivel de error mínimo que se ha de 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 |
-NewPassword |
Archivo de entrada que contiene una consulta. |
-i |
-InputFile |
Longitud máxima de la salida de caracteres. |
-w |
-MaxCharLength |
Longitud máxima de la salida binaria. |
-w |
-MaxBinaryLength |
Conectarse con cifrado SSL. |
Ningún parámetro. |
-EncryptConnection |
Mostrar los errores. |
Ningún parámetro. |
-OutputSqlErrors |
Mensajes de salida a stderr. |
-r |
Ningún parámetro. |
Usar la configuración regional del cliente. |
-R |
Ningún parámetro. |
Ejecutar la consulta especificada y continuar la ejecución. |
-q |
Ningún parámetro. |
Página de códigos que se ha de utilizar para los datos de salida. |
-f |
Ningún parámetro. |
Cambiar una contraseña y continuar la ejecución. |
-z |
Ningún parámetro. |
Tamaño del paquete |
-a |
Ningún parámetro. |
Delimitador de columnas. |
-s |
Ningún parámetro. |
Controlar los encabezados de salida |
-h |
Ningún parámetro. |
Especificar los caracteres de control. |
-k |
Ningún parámetro. |
Ancho de presentación de longitud fija. |
-Y |
Ningún parámetro. |
Ancho de presentación de longitud variable. |
-y |
Ningún parámetro. |
Entrada de eco. |
-e |
Ningún parámetro. |
Habilitar los identificadores entre comillas. |
-I |
Ningún parámetro. |
Quitar los espacios finales. |
-W |
Ningún parámetro. |
Enumerar instancias. |
-L |
Ningún parámetro. |
Dar formato al resultado como Unicode. |
-u |
Ningún parámetro. |
Imprimir las estadísticas. |
-p |
Ningún parámetro. |
Fin del comando. |
-c |
Ningún parámetro. |
Conectar con la autenticación de Windows. |
-E |
Ningún parámetro. |