Consultando Microsoft SQL Server con Invoke SqlCmd – 2xsoftware

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, debe 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 la Invocar SqlCmd cmdlet.

Aquí se explica cómo usar 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 de 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 invocar sqlcmd

Enumere los comandos disponibles en el módulo:

Import-Module sqlserver

Get-Command -Module SqlServer

powershell sqlcmd

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

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

Especifique su nombre de instancia de MSSQL:

$SQLinst ="ny-sql01SQLEXPRESS"

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

Set-Location SQLSERVER:SQLlocalhost

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 listar la base de datos, ejecute el siguiente comando:

Get-SqlDatabase -ServerInstance $SQLinst -Credential $cred

invocar la instancia del servidor sqlcmd

Nota. Puede usar la opción -Password para conectarse a SQL Server usando una contraseña de texto no cifrado.

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 hacerlo, agregue la siguiente canalización al comando ((| Export-Csv -Path C:VSCodeSqlResult.csv -Delimiter “;”), o vea los resultados en una tabla gráfica GridView (|Out-GridView).

Nota. Consulte nuestro artículo sobre el uso del archivo Tnsnames.ora en SQL Developer.

invocar ejemplos de powershell de sqlcmd

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 tengan que especificarse 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 System.Data.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:VSCodeMySqlScript.sql"

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

  • Crear mesa:
    $query = "CREATE TABLE resellers (Name nvarchar(40), City nvarchar(30), email nvarchar(50))"
    
    Invoke-Sqlcmd -Query $query @params
  • Inserte un nuevo valor en 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 artculo post

Deja una respuesta

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