Gibt es eine Möglichkeit, eine beliebige Abfrage auf einem SQL Server mit Powershell auf meinem lokalen Computer auszuführen?
Gibt es eine Möglichkeit, eine beliebige Abfrage auf einem SQL Server mit Powershell auf meinem lokalen Computer auszuführen?
Für andere, die dies nur mit Standard-.net und PowerShell tun müssen (keine zusätzlichen SQL-Tools installiert), ist hier die Funktion, die ich verwende:
function Invoke-SQL {
param(
[string] $dataSource = ".\SQLEXPRESS",
[string] $database = "MasterData",
[string] $sqlCommand = $(throw "Please specify a query.")
)
$connectionString = "Data Source=$dataSource; " +
"Integrated Security=SSPI; " +
"Initial Catalog=$database"
$connection = new-object system.data.SqlClient.SQLConnection($connectionString)
$command = new-object system.data.sqlclient.sqlcommand($sqlCommand,$connection)
$connection.Open()
$adapter = New-Object System.Data.sqlclient.sqlDataAdapter $command
$dataset = New-Object System.Data.DataSet
$adapter.Fill($dataSet) | Out-Null
$connection.Close()
$dataSet.Tables
}
Ich benutze dies so lange, dass ich nicht weiß, wer welche Teile geschrieben hat, aber dies wurde aus den Beispielen anderer herausgearbeitet, aber vereinfacht, um klar zu sein und genau das, was ohne zusätzliche Abhängigkeiten oder Funktionen benötigt wird.
Ich benutze und teile dies oft genug, so dass ich es in ein Skriptmodul auf GitHub verwandelt habe, so dass Sie jetzt in Ihr Modulverzeichnis gehen und es ausführen können. git clone https://github.com/ChrisMagnuson/InvokeSQL
Von diesem Punkt an wird invoke-sql automatisch geladen, wenn Sie es verwenden (vorausgesetzt Sie verwenden Powershell v3 oder höher.
$connection.dispose()
usw. Ich weiß nicht, ob es einen Unterschied machtSie können das
Invoke-Sqlcmd
Cmdlet verwendenhttp://technet.microsoft.com/en-us/library/cc281720.aspx
quelle
Import-Module "sqlps" -DisableNameChecking
Hier ist ein Beispiel, das ich in diesem Blog gefunden habe .
Vermutlich könnten Sie eine andere TSQL-Anweisung ersetzen, in der es heißt
dbcc freeproccache
.quelle
ExecuteNonQuery()
bei Erfolg null zurückgegeben. Die Bedingung, die ich verwende, ist :if ($cmd.ExecuteNonQuery() -ne 0)
.Diese Funktion gibt die Ergebnisse einer Abfrage als Array von Powershell-Objekten zurück, sodass Sie sie problemlos in Filtern verwenden und auf Spalten zugreifen können:
quelle
DataTable
(siehe Adams Antwort )?Wenn Sie dies auf Ihrem lokalen Computer anstatt im Kontext von SQL Server tun möchten, würde ich Folgendes verwenden. Es ist das, was wir in meiner Firma verwenden.
Geben Sie einfach $ ServerName , $ DatabaseName und $ Query ein Variablen und Sie sollten gut zu gehen.
Ich bin nicht sicher , wie wir ursprünglich diesen herausgefunden, aber es ist etwas sehr ähnliche hier .
quelle
quelle
Es gibt keine integrierte "PowerShell" -Methode zum Ausführen einer SQL-Abfrage. Wenn Sie die SQL Server-Tools installiert haben , erhalten Sie ein Cmdlet Invoke- SqlCmd.
Da PowerShell auf .NET basiert, können Sie Ihre Abfragen mithilfe der ADO.NET-API ausführen.
quelle
Um SQL Injection mit varchar-Parametern zu vermeiden, können Sie verwenden
quelle