2.6K
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
Enumere los comandos disponibles en el módulo:
Import-Module sqlserver Get-Command -Module SqlServer
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
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
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.
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).
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