Freigeben über


Invoke-Sqlcmd cmdlet

Invoke-Sqlcmd ist ein SQL Server-Cmdlet , das Skripts ausführt, die Anweisungen aus den Sprachen (Transact-SQL und XQuery) und Befehlen enthalten, die vom sqlcmd-Hilfsprogramm unterstützt werden.

Verwenden von Invoke-Sqlcmd

Mit dem Cmdlet Invoke-Sqlcmd können Sie Ihre sqlcmd-Skriptdateien in einer Windows PowerShell-Umgebung ausführen. Viele Möglichkeiten, die Sie mit sqlcmd ausführen können, können auch mit Invoke-Sqlcmd ausgeführt werden.

Dies ist ein Beispiel für das Aufrufen von Invoke-Sqlcmd zum Ausführen einer einfachen Abfrage, ähnlich der Angabe von sqlcmd mit den Optionen -Q und -S :

Invoke-Sqlcmd -Query "SELECT GETDATE() AS TimeOfQuery;" -ServerInstance "MyComputer\MyInstance"  

Dies ist ein Beispiel für das Aufrufen von Invoke-Sqlcmd, das Angeben einer Eingabedatei und das Anfügen der Ausgabe an eine Datei. Dies ähnelt der Angabe von sqlcmd mit den Optionen -i und -o :

Invoke-Sqlcmd -InputFile "C:\MyFolder\TestSQLCmd.sql" | Out-File -FilePath "C:\MyFolder\TestSQLCmd.rpt"  

Dies ist ein Beispiel für die Verwendung eines Windows PowerShell-Arrays zum Übergeben mehrerer sqlcmd-Skriptingvariablen an Invoke-Sqlcmd. Die Zeichen "$" zur Identifizierung der sqlcmd-Skriptingvariablen in der SELECT-Anweisung wurden durch das Escapezeichen "`" des PowerShell-Backticks maskiert.

$MyArray = "MyVar1 = 'String1'", "MyVar2 = 'String2'"  
Invoke-Sqlcmd -Query "SELECT `$(MyVar1) AS Var1, `$(MyVar2) AS Var2;" -Variable $MyArray  

Dies ist ein Beispiel für die Verwendung des SQL Server-Anbieters für Windows PowerShell, um zu einer Instanz des Datenbankmoduls zu navigieren, und dann mithilfe des Windows PowerShell Get-Item-Cmdlets das SMO Server-Objekt für die Instanz abzurufen und es an Invoke-Sqlcmd zu übergeben.

Set-Location SQLSERVER:\SQL\MyComputer\MyInstance  
Invoke-Sqlcmd -Query "SELECT GETDATE() AS TimeOfQuery;" -ServerInstance (Get-Item .)  

Der parameter -Query ist positional und muss nicht benannt werden. Wenn die erste Zeichenfolge, die an Invoke-Sqlcmd übergeben wird, unbenannt ist, wird sie als -Query-Parameter behandelt.

Invoke-Sqlcmd "SELECT GETDATE() AS TimeOfQuery;" -ServerInstance "MyComputer\MyInstance"  

Pfadkontext in Invoke-Sqlcmd

Wenn Sie den parameter -Database nicht verwenden, wird der Datenbankkontext für Invoke-Sqlcmd durch den Pfad festgelegt, der aktiv ist, wenn das Cmdlet aufgerufen wird.

Pfad Datenbankkontext
Beginnt mit einem anderen Laufwerk als SQLSERVER: Die Standarddatenbank für die Anmelde-ID in der Standardinstanz auf dem lokalen Computer.
SQLSERVER:\SQL Die Standarddatenbank für die Anmelde-ID in der Standardinstanz auf dem lokalen Computer.
SQLSERVER:\SQL\ComputerName Die Standarddatenbank für die Anmelde-ID in der Standardinstanz auf dem angegebenen Computer.
SQLSERVER:\SQL\ComputerName\InstanceName Die Standarddatenbank für die Anmelde-ID in der angegebenen Instanz auf dem angegebenen Computer.
SQLSERVER:\SQL\ComputerName\InstanceName\Datenbanken Die Standarddatenbank für die Anmelde-ID in der angegebenen Instanz auf dem angegebenen Computer.
SQLSERVER:\SQL\ComputerName\InstanceName\Databases\DatabaseName Die angegebene Datenbank in der angegebenen Instanz auf dem angegebenen Computer. Dies gilt auch für längere Pfade, z. B. einen Pfad, der den Knoten "Tabellen" und "Spalten" in einer Datenbank angibt.

Angenommen, die Standarddatenbank für Ihr Windows-Konto in der Standardinstanz des lokalen Computers ist Master. Anschließend würden die folgenden Befehle master zurückgeben:

Set-Location SQLSERVER:\SQL  
Invoke-Sqlcmd "SELECT DB_NAME() AS DatabaseName;"  

Die folgenden Befehle würden AdventureWorks2012 zurückgeben:

Set-Location SQLSERVER:\SQL\MyComputer\DEFAULT\Databases\AdventureWorks2012\Tables\Person.Person  
Invoke-Sqlcmd "SELECT DB_NAME() AS DatabaseName;"  

Invoke-Sqlcmd gibt eine Warnung an, wenn der Pfaddatenbankkontext verwendet wird. Sie können den parameter -SuppressProviderContextWarning verwenden, um die Warnmeldung zu deaktivieren. Sie können den parameter -IgnoreProviderContext verwenden, um Invoke-Sqlcmd anweisen, immer die Standarddatenbank für die Anmeldung zu verwenden.

Vergleich von Invoke-Sqlcmd und dem sqlcmd-Dienstprogramm

Invoke-Sqlcmd kann verwendet werden, um viele der Skripts auszuführen, die mit dem sqlcmd-Hilfsprogramm ausgeführt werden können. Invoke-Sqlcmd wird jedoch in einer Windows PowerShell-Umgebung ausgeführt, die sich von der Befehlszeilenumgebung unterscheidet, in der sqlcmd ausgeführt wird. Das Verhalten von Invoke-Sqlcmd wurde geändert, um in einer Windows PowerShell-Umgebung zu arbeiten.

Nicht alle sqlcmd-Befehle werden in Invoke-Sqlcmd implementiert. Befehle, die nicht implementiert sind, umfassen: :!!, :connect, :error, :out, :ed, :list, :listvar, :reset, :p erftrace und :serverlist.

Invoke-Sqlcmd initialisiert nicht die sqlcmd-Umgebung oder Skriptvariablen wie SQLCMDDBNAME oder SQLCMDWORKSTATION.

Invoke-Sqlcmd zeigt keine Meldungen an, z. B. die Ausgabe von PRINT-Anweisungen, es sei denn, Sie geben den allgemeinen Windows PowerShell -Verbose-Parameter an. Beispiel:

Invoke-Sqlcmd -Query "PRINT N'abc';" -Verbose  

Nicht alle sqlcmd-Parameter werden in einer PowerShell-Umgebung benötigt. Beispielsweise formatiert Windows PowerShell alle Ausgaben von Cmdlets, sodass die sqlcmd-Parameter , die Formatierungsoptionen angeben, nicht in Invoke-Sqlcmd implementiert werden. Die folgende Tabelle zeigt die Beziehung zwischen den Invoke-Sqlcmd-Parametern und sqlcmd-Optionen:

BESCHREIBUNG Die sqlcmd-Option Invoke-Sqlcmd Parameter
Server- und Instanzname. -S -ServerInstance
Die zu verwendende Anfangsdatenbank. -d -Datenbank
Führen Sie die angegebene Abfrage aus, und beenden Sie sie. -Q -Frage
ANMELDE-ID der SQL Server-Authentifizierung. -U -Nutzername
SQL Server-Authentifizierungskennwort. -P -Passwort
Variable Definition. -v -Variable
Abfrage-Zeitüberschreitungsintervall -t -QueryTimeout
Beenden der Ausführung bei einem Fehler -b -AbortOnError
Dedizierte Administratorverbindung. -A -DedizierteAdministratorverbindung
Deaktivieren Sie interaktive Befehle, Startskripts und Umgebungsvariablen. -X -DisableCommands
Variablenersetzung deaktivieren. -x -DeaktivierenVariablen
Mindestschweregrad für Meldung. -V -SeverityLevel
Mindestfehlerstufe, die gemeldet werden soll. -m -ErrorLevel
Anmelde-Timeout-Intervall -l -Verbindungszeitüberschreitung
Hostnamen. -H -HostName
Kennwort ändern und beenden. -Z -NeuesPasswort
Eingabedatei mit einer Abfrage -Ich -InputFile
Maximale Länge der Zeichenausgabe. -w -MaxCharLength
Maximale Länge der binären Ausgabe. -w -MaxBinaryLänge
Stellen Sie eine Verbindung mit SSL-Verschlüsselung her. Kein Parameter -EncryptConnection
Anzeigefehler Kein Parameter -OutputSqlErrors
Ausgabemeldungen an stderr. -r Kein Parameter
Verwenden der regionalen Einstellungen des Clients -R Kein Parameter
Führen Sie die angegebene Abfrage aus, und bleiben Sie aktiv. -q Kein Parameter
Codepage, die für Ausgabedaten verwendet werden soll. f- Kein Parameter
Ein Passwort ändern und weiterlaufen lassen -Z Kein Parameter
Paketgröße -ein Kein Parameter
Spaltentrennzeichen -s Kein Parameter
Ausgabeheader steuern -h Kein Parameter
Angabe von Steuerzeichen -k Kein Parameter
Breite der Anzeige mit fester Länge -Y Kein Parameter
Breite der anzeigevariablen Länge -y Kein Parameter
Echoeingabe -e Kein Parameter
Aktivieren von Bezeichnern in Anmerkungen -Ich Kein Parameter
Entfernen der nachgestellten Leerzeichen -W Kein Parameter
Instanzen auflisten -L Kein Parameter
Formatieren der Ausgabe als Unicode -u Kein Parameter
Statistiken drucken -p Kein Parameter
Befehlsende -c Kein Parameter
Herstellen einer Verbindung mithilfe der Windows-Authentifizierung -E Kein Parameter

Siehe auch

Verwenden Sie die Cmdlets des Datenbankmoduls
sqlcmd Utility
Verwenden des Hilfsprogramms sqlcmd