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 admitidos por la utilidad sqlcmd.
Usar Invoke-Sqlcmd
El cmdlet Invoke-Sqlcmd permite ejecutar archivos de script de sqlcmd en un entorno de Windows PowerShell. Invoke-Sqlcmd permite llevar a cabo una gran parte de lo que se puede hacer con sqlcmd.
Aquí 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"
Aquí se muestra un ejemplo en el que se llama a Invoke-Sqlcmd, donde se especifica un archivo de entrada y se 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 navegar a una instancia del motor de base de datos y, a continuación, usar el cmdlet Windows PowerShell Get-Item para recuperar el objeto de servidor SMO 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 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 (maestra). Entonces, 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 . Pero 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. Los comandos que no se implementan incluyen lo siguiente: :!!, :connect, :error, :out, :ed, :list, :listvar, :reset, :p erftrace y :serverlist.
Invoke-Sqlcmd no inicializa el entorno de sqlcmd ni 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 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 |
SQL Server id. de inicio de sesión de autenticación. | -U | -Username |
SQL Server contraseña de autenticación. | -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. |
Consulte también
Utilizar los cmdlets del motor de base de datos
Utilidad sqlcmd
Usar la utilidad sqlcmd