Consultando Microsoft SQL Server con Invoke SqlCmd – TrucosInformaticos

General

Para administrar Microsoft SQL Server y ejecutar consultas T-SQL, la mayoría de los desarrolladores y administradores utilizan la GUI de SQL Server Management Studio (SSMS) o VSCode con extensiones. Pero en algunos escenarios, es necesario obtener o escribir datos en la base de datos MSSQL desde la línea de comandos o el script de PowerShell. Para ejecutar consultas en bases de datos de SQL Server, puede utilizar el SQLCMD herramienta o el Invocar SqlCmd cmdlet.

A continuación se explica cómo utilizar PowerShell para conectarse a una base de datos de SQL Server y ejecutar consultas SQL.

El cmdlet Invoke-SqlCmd es parte del módulo SqlServer. Puede instalarlo desde la Galería PowerShell en línea usando el comando:

Install-Module -Name SqlServer –AllowClobber

Para verificar que ha instalado el módulo SQL PowerShell, ejecute el siguiente comando:

Get-Module sqlserver

powershell invoca sqlcmd

Enumere los comandos disponibles en el módulo:

Import-Module sqlserver

Get-Command -Module SqlServer

powershellsqlcmd

Pista. Puede instalar el módulo SqlServer y utilizar Invoke-Sqlcmd en MacOS y Linux.

Ahora veamos cómo conectarse a una instancia de SQL Server local o remota.

Especifique el nombre de su instancia MSSQL:

$SQLinst ="ny-sql01\SQLEXPRESS"

Nota. Los siguientes comandos enumeran todas las instancias disponibles en la computadora actual:

Set-Location SQLSERVER:\SQL\localhost

Get-ChildItem

invocar ejemplos de sqlcmd

Solicite credenciales para conectarse a SQL Server. Puede especificar las credenciales de su cuenta de usuario local si la autenticación mixta o de Windows está habilitada en MSSQL:

$cred = Get-Credential

Para conectarse a una instancia de Microsoft SQL y enumerar la base de datos, ejecute el siguiente comando:

Get-SqlDatabase -ServerInstance $SQLinst -Credential $cred

invocar la instancia del servidor sqlcmd

Nota. Puede utilizar la opción -Contraseña para conectarse a SQL Server utilizando una contraseña de texto sin cifrar.

Ahora, usando Invoke-SqlCmd, puede conectarse a cualquier base de datos y ejecutar una consulta SQL simple:

Invoke-Sqlcmd -ServerInstance $SQLinst -Credential $cred -Database sales -Query "SELECT * FROM sales.customers"

Nota. Los comandos admitidos son declaraciones T-SQL y el subconjunto XQuery.

Puede ocurrir un error al conectarse a la base de datos:

Invoke-Sqlcmd: se estableció correctamente una conexión con el servidor, pero luego se produjo un error durante el proceso de inicio de sesión. (proveedor: Proveedor SSL, error: 0: la cadena de certificados fue emitida por una autoridad que no es de confianza).

En este caso, deberá agregar el parámetro -TrustServerCertificate al comando Invoke-Sqlcmd.

invocar consulta sqlcmd

Puede exportar los resultados de la consulta de la tabla SQL a un archivo CSV. Para hacer eso, agregue la siguiente tubería al comando ((| Export-Csv -Path C:\VSCode\SqlResult.csv -Delimiter “;”), o vea los resultados en una tabla gráfica GridView (|Out-GridView).

invocar ejemplos de sqlcmd powershell

Los parámetros de conexión SQL y el nombre de la base de datos se pueden almacenar en una tabla hash para que no sea necesario especificarlos en el comando cada vez:

$params = @{Credential=$cred; Database="sales"; ServerInstance=$SQLinst}

Para ejecutar una consulta SQL, ahora necesita ejecutar:

$query = "SELECT * FROM sales"

Invoke-Sqlcmd @params -Query $query | ft

De forma predeterminada, Invoke-Sqlcmd devuelve una serie de Sistema.Datos.DataRow escriba filas. Puede ver este formato como un objeto de PowerShell de la siguiente manera:

$table= Invoke-Sqlcmd @params -Query $query

write-host ($table | Format-Table | Out-String)

Si su consulta SQL está almacenada en un archivo de texto, puede ejecutarla usando el -Archivos de entrada parámetro:

Invoke-Sqlcmd @params -InputFile "C:\VSCode\MySqlScript.sql"

Puede ejecutar no solo consultas SELECT, sino también otros tipos de consultas:

  • Crear tabla:
    $query = "CREATE TABLE resellers (Name nvarchar(40), City nvarchar(30), email nvarchar(50))"
    
    Invoke-Sqlcmd -Query $query @params
  • Inserte un nuevo valor a la tabla:
    $city = "Oakland"
    
    $name = "alex2000"
    
    $email = "alex2000@msn.com"
    
    $query = "INSERT INTO resellers (Name, City, email) VALUES('$name', '$city', '$email')"
    
    Invoke-Sqlcmd @params -Query $query

Valora este post

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *