Usar el 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 comandos admitidos por la utilidad sqlcmd.
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, 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 de cómo utilizar una matriz de Windows PowerShell para pasar varias variables de scripting sqlcmd a Invoke-Sqlcmd. El escape de los caracteres "$" que identifican las variables de scripting sqlcmd en la instrucción SELECT se ha realizado utilizando el carácter de escape de acento invertido "`" de Windows 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 navegar a una instancia de Database Engine (Motor de base de datos) y usar a continuación 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 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 mediante 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 (maestra). Entonces, los comandos siguientes devolverían master (maestra):
Set-Location SQLSERVER:\SQL
Invoke-Sqlcmd "SELECT DB_NAME() AS DatabaseName;"
Los comandos siguientes devolverían AdventureWorks:
Set-Location SQLSERVER:\SQL\MyComputer\DEFAULT\Databases\AdventureWorks\Tables\Person.Contact
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 utilice siempre la base de datos predeterminada para el inicio de sesión.
Comparar Invoke-Sqlcmd y la utilidad sqlcmd
Invoke-Sqlcmd se puede utilizar 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 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 scripts 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 Windows 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 de 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, scripts 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 |
-HbostName |
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 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 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. |
Vea también