Compartir a través de


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.