Verwenden von SQL Server-Bezeichnern in PowerShell

Wenn Sie den SQL Server-Anbieter für Windows PowerShell mit Database Engine (Datenbankmodul) verwenden, müssen Sie den Computernamen und den Instanznamen angeben. Dies gilt auch für Standardinstanzen.

Der Anbieter verwendet SQL Server-Bezeichner in Windows PowerShell-Pfaden. SQL Server-Bezeichner können Zeichen enthalten, die Windows PowerShell in Pfadnamen nicht unterstützt. Sie müssen diese Zeichen mit Escapezeichen versehen oder besondere Codierungen für sie verwenden, wenn Sie die Bezeichner in Windows PowerShell-Pfaden verwenden.

Computernamen

Der erste Knoten, der auf SQLSERVER:\SQL folgt, ist der Name des Computers, auf dem die Instanz von Database Engine (Datenbankmodul) ausgeführt wird. Beispiel: SQLSERVER:\SQL\MyComputer. Wenn Sie Windows PowerShell auf demselben Computer ausführen wie die Instanz von Database Engine (Datenbankmodul), können Sie anstelle des Computernamens entweder localhost oder (local) verwenden. Skripts, die localhost oder (local) verwenden, können auf jedem Computer ausgeführt werden, ohne entsprechend dem jeweiligen Computernamen geändert werden zu müssen. Beispielsweise ruft dieser Befehl die AdventureWorks2008R2-Beispieldatenbank in der Standardinstanz auf dem lokalen Computer auf:

Set-Location SQLSERVER:\SQL\localhost\DEFAULT\Databases\AdventureWorks2008R2

Die Klammerzeichen in (local) werden von Windows PowerShell normalerweise als Befehle behandelt. Daher müssen Sie entweder:

  • Pfadzeichenfolgen in Anführungszeichen setzen:

    Set-Location "SQLSERVER:\SQL\(local)\DEFAULT\Databases\AdventureWorks2008R2"
    
  • Die Klammer mit dem Graviszeichen (`) maskieren.

    Set-Location SQLSERVER:\SQL\`(local`)\DEFAULT\Databases\AdventureWorks2008R2
    
  • Die Klammer in ihrer hexadezimalen Darstellung codieren.

    Set-Location SQLSERVER:\SQL\%28local%29\DEFAULT\Databases\AdventureWorks2008R2
    

Das Maskieren und die Codierung von Zeichen wird an späterer Stelle in diesem Thema ausführlich beschrieben.

Sie können keinen Punkt (.) verwenden, um den lokalen Computer in PowerShell-Skripts anzugeben. Der Punkt wird nicht unterstützt, da der Punkt von PowerShell als Befehl interpretiert wird.

Standardinstanznamen

Sie können mehrere Instanzen des ausführbaren Programms Database Engine (Datenbankmodul) auf demselben Computer ausführen. Instanzen von Database Engine (Datenbankmodul) werden durch die Kombination aus Computername und Instanzname identifiziert, wie z. B. Arbeitsplatz\MeineInstanz.

Jeder Computer kann eine Standardinstanz des Database Engine (Datenbankmodul) aufweisen. Sie geben bei der Installation keinen Namen für die Standardinstanz an. Wenn Sie in einer Verbindungszeichenfolge nur einen Computernamen angeben, werden Sie mit der Standardinstanz auf diesem Computer verbunden. Alle anderen Instanzen auf dem Computer müssen benannte Instanzen sein. Sie geben den Instanznamen während des Setups ein, und die Verbindungszeichenfolgen müssen sowohl den Computernamen als auch den Instanznamen angeben.

Für den SQL Server-Anbieter ist immer die Angabe eines Instanznamens erforderlich. Für Standardinstanzen müssen Sie den Instanznamen DEFAULT angeben.

SQL Server-Bezeichner in Windows PowerShell-Pfaden

Windows PowerShell-Anbieter machen Datenhierarchien mithilfe einer Pfadstruktur verfügbar, die der für das Windows-Dateisystem verwendeten Pfadstruktur ähnelt. Der SQL Server-Anbieter implementiert Pfade zu SQL Server-Objekten. Für Database Engine (Datenbankmodul) sind das Laufwerk auf SQLSERVER und der erste Ordner auf \SQL festgelegt, und auf die Datenbankobjekte wird als Container und Elemente verwiesen. Dies ist der Pfad zur Vendor-Tabelle im Purchasing-Schema der AdventureWorks2008R2-Datenbank in einer Standardinstanz von Database Engine (Datenbankmodul):

SQLSERVER:\SQL\MyComputer\DEFAULT\Databases\AdventureWorks2008R2\Tables\Purchasing.Vendor

SQL Server-Bezeichner sind die Namen von SQL Server-Objekten, z. B. Tabellen- oder Spaltennamen. Es gibt zwei Arten von SQL Server-Bezeichnern:

  • Reguläre Bezeichner sind auf einen Satz von Zeichen beschränkt, die auch in Windows PowerShell-Pfaden unterstützt werden. Diese Namen können in Windows PowerShell-Pfaden verwendet werden, ohne geändert zu werden.

  • Begrenzte Bezeichner können Zeichen verwenden, die in Windows PowerShell-Pfadnamen nicht unterstützt werden. Begrenzte Bezeichner werden Bezeichner in Klammern genannt, wenn sie in Klammern eingeschlossen sind ([IdentifierName]), und Bezeichner in Anführungszeichen, wenn sie in doppelte Anführungszeichen eingeschlossen sind ("IdentifierName"). Wenn ein begrenzter Bezeichner Zeichen verwendet, die in Windows PowerShell-Pfaden nicht unterstützt werden, müssen diese Zeichen entweder codiert oder mit Escapezeichen versehen werden, bevor der Bezeichner als Container- oder Elementname verwendet werden kann. Codierung funktioniert bei allen Zeichen. Einige Zeichen, z. B. das Doppelpunktzeichen (:), können nicht mit Escapezeichen versehen werden.

Codierung und Decodierung von Bezeichnern

Zeichen, die nicht in Windows PowerShell-Pfadnamen unterstützt werden, können als "%"-Zeichen gefolgt vom Hexadezimalwert des Bitmusters, das das Zeichen darstellt, dargestellt oder codiert werden (Beispiel: **%**xx). Codierung kann immer zur Verarbeitung von Zeichen verwendet werden, die in Windows PowerShell-Pfaden nicht unterstützt werden.

Das Cmdlet Encode-SqlName nimmt einen SQL Server-Bezeichner als Eingabe auf. Es gibt eine Zeichenfolge mit allen nicht von der Windows PowerShell-Sprache unterstützten Zeichen, die mit "%xx" codiert sind, aus. Das Cmdlet Decode-SqlName nimmt einen codierten SQL Server-Bezeichner als Eingabe auf und gibt den ursprünglichen Bezeichner zurück. Zum Beispiel:

  • Dieser Befehl gibt die Zeichenfolge "Table%3ATest" zurück:

    Encode-SqlName "Table:Test"
    
  • Dieser Befehl gibt "Table:Test" zurück:

    Decode-SqlName "Table%3ATest"
    

Wenn Sie begrenzte Bezeichner in Windows PowerShell-Cmdlets angeben, können Sie die codierten Zeichenwerte entweder selbst oder mit Encode-SqlName zur Verfügung stellen. Wenn Sie z. B. bereits zu dem Schema, das die Tabelle [Table:Test] enthält, navigiert sind, können Sie mit cd zur Tabelle wechseln, indem Sie die codierte Version des ":"-Zeichens angeben:

Set-Location Table%3ATest

Alternativ können Sie Encode-SqlName verwenden, um einen von Windows PowerShell unterstützten Namen zu erstellen:

Set-Location (Encode-SqlName "Table:Test")

Dies sind die von Encode-SqlName codierten und von Decode-SqlName decodierten Zeichen:

Zeichen

\

/

:

%

<

>

*

?

[

]

|

Hexadezimale Codierung

%5C

%2F

%3A

%25

%3C

%3E

%2A

%3F

%5B

%5D

%7C

Umwandeln von Zeichen mit Escapezeichen

Sie können Zeichen, die zwar in begrenzten SQL Server-Bezeichnern zulässig sind, nicht jedoch in Windows PowerShell-Pfadnamen, oftmals mit dem Windows PowerShell-Escapezeichen (`) umwandeln. Einige Zeichen können jedoch nicht mit Escapezeichen versehen werden. Zum Beispiel können Sie das Doppelpunktzeichen (:) in Windows PowerShell nicht mit Escapezeichen versehen. Bezeichner mit diesem Zeichen müssen codiert werden. Codierung ist zuverlässiger als das Umwandeln mit Escapezeichen, da das Codieren für alle Zeichen funktioniert.

Dies ist ein Beispiel für das Umwandeln eines #-Zeichens mittels Escapezeichen:

cd SQLSERVER:\SQL\MyComputer\MyInstance\MyDatabase\MySchema\`#MyTempTable

Das Graviszeichen (`) befindet sich i. d. R. oben rechts auf der Tastatur, links von der RÜCKTASTE.

SQL Server-Bezeichner in Cmdlets

Einige SQL Server-Cmdlets verfügen über einen Parameter, der einen Bezeichner als Eingabe akzeptiert. Die Parameterwerte werden i. d. R. als von Anführungszeichen umschlossene Zeichenfolgenkonstanten oder in Zeichenfolgenvariablen angegeben. Wenn Bezeichner als Zeichenfolgenkonstanten oder in Variablen angegeben werden, gibt es keinen Konflikt mit dem von Windows PowerShell unterstützten Zeichensatz.