共用方式為


在 PowerShell 中使用 SQL Server 識別碼

當您搭配 Database Engine 使用適用於 Windows PowerShell 的 SQL Server 提供者時,必須提供電腦和執行個體的名稱,即使是預設執行個體也一樣。

此提供者會使用 Windows PowerShell 路徑中的 SQL Server 識別碼。SQL Server 識別碼可包含 Windows PowerShell 在路徑中不支援的字元。當您使用 Windows PowerShell 路徑中的識別碼時,您必須逸出這些字元或針對這些字元使用特殊編碼。

電腦名稱

接在 SQLSERVER:\SQL 後面的第一個節點是執行 Database Engine 執行個體的電腦名稱。例如,SQLSERVER:\SQL\MyComputer。如果您在與 Database Engine 執行個體相同的電腦上執行 Windows PowerShell,就可以使用 localhost 或 (local) 來取代電腦的名稱。使用 localhost 或 (local) 的指令碼可以在任何電腦上執行,而不需要變更成反映不同的電腦名稱。例如,這個命令將會移至本機電腦上預設執行個體中的 AdventureWorks 範例資料庫:

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

(local) 中的括號字元通常會被 Windows PowerShell 視為命令。因此,您必須:

  • 以引號括住路徑字串:

    Set-Location "SQLSERVER:\SQL\(local)\DEFAULT\Databases\AdventureWorks"
    
  • 使用反勾號字元 (`) 來逸出括號。

    Set-Location SQLSERVER:\SQL\`(local`)\DEFAULT\Databases\AdventureWorks
    
  • 使用十六進位表示法來編碼括號。

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

本主題稍後將詳細討論逸出和編碼字元。

您不能使用句號 (.) 在 Windows PowerShell 指令碼中指定本機電腦。因為句號會被 Windows PowerShell 解譯成命令,所以不支援句號。

預設執行個體名稱

您可以在相同電腦上執行 Database Engine 可執行程式的多個執行個體。Database Engine 的執行個體是由電腦名稱和執行個體名稱的組合來識別,例如 MyComputer\MyInstance。

每一部電腦都只能有一個預設 Database Engine 執行個體。當您安裝預設執行個體時,未指定它的名稱。如果您在連接字串中只有指定電腦名稱,您會連接到該電腦上的預設執行個體。此電腦上的所有其他執行個體都必須是具名執行個體。您可在安裝期間指定執行個體名稱,而且連接字串必須指定電腦名稱和執行個體名稱。

SQL Server 提供者會要求您一定要指定執行個體名稱。如果是預設執行個體,您必須指定執行個體名稱 DEFAULT。

Windows PowerShell 路徑中的 SQL Server 識別碼

Windows PowerShell 提供者會使用與 Windows 檔案系統所使用之路徑結構類似的結構來公開資料階層。SQL Server 提供者會實作 SQL Server 物件的路徑。如果是 Database Engine,磁碟機會設定為 SQLSERVER:、第一個資料夾會設定為 \SQL,而且資料庫物件會當做容器和項目來參考。這是預設 Database Engine 執行個體中 AdventureWorks 資料庫之 Purchasing 結構描述的 Vendor 資料表路徑:

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

SQL Server 識別碼為 SQL Server 物件的名稱,例如資料表或資料行名稱。SQL Server 識別碼有兩種:

  • 一般識別碼限制為 Windows PowerShell 路徑中也支援的一組字元。這些名稱可以在 Windows PowerShell 路徑中使用,而不需變更。

  • 分隔識別碼可以使用 Windows PowerShell 路徑名稱中不支援的字元。分隔識別碼如果放在括號內 ([IdentifierName]),則稱為括號識別碼,而如果是放在雙引號內 ("IdentifierName"),則稱為引號識別碼。如果分隔識別碼使用 Windows PowerShell 路徑中不支援的字元,這些字元必須先編碼或逸出,然後才可以使用該識別碼當做容器或項目名稱。編碼適用於所有字元。某些字元 (例如冒號字元 (:)) 無法逸出。

編碼及解碼識別碼

Windows PowerShell 路徑名稱中不支援的字元可以表示或編碼為 "%" 字元,後面緊接著代表此字元之位元模式的十六進位值,就像是 "**%**xx"。編碼一定可以用來處理 Windows PowerShell 路徑中不支援的字元。

Encode-SqlName 指令程式會將 SQL Server 識別碼當做輸入。它會輸出一個字串,其中包含編碼為 "%xx" 之 Windows PowerShell 語言不支援的所有字元。Decode-SqlName 指令程式會將編碼的 SQL Server 識別碼當做輸入,並傳回原始識別碼。例如:

  • 這個命令會傳回 "Table%3ATest" 字串:

    Encode-SqlName "Table:Test"
    
  • 這個命令會傳回 "Table:Test":

    Decode-SqlName "Table%3ATest"
    

當您在 Windows PowerShell 指令程式中指定分隔識別碼時,您可以自己提供編碼字元,或是使用 Encode-SqlName 提供編碼字元。例如,如果您已經導覽至包含 [Table:Test] 資料表的結構描述,您可以提供編碼版本的 ":" 字元來 cd 至此資料表:

Set-Location Table%3ATest

另外,您也可以使用 Encode-SqlName 來建立 PowerShell 提供的名稱:

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

這些是由 Encode-SqlName 所編碼並由 Decode-SqlName 所解碼的字元:

字元

\

/

:

%

<

>

*

?

[

]

|

十六進位編碼

%5C

%2F

%3A

%25

%3C

%3E

%2A

%3F

%5B

%5D

%7C

逸出字元

您可以經常使用 Windows PowerShell 反勾號逸出字元 (`) 來逸出 SQL Server 分隔識別碼中所允許,但是 Windows PowerShell 路徑名稱所不允許的字元。但是,某些字元無法逸出。例如,您無法逸出 Windows PowerShell 中的冒號字元 (:)。具有該字元的識別碼必須加以編碼。編碼比逸出更為可靠,因為編碼適用於所有字元。

這是逸出 # 字元的範例:

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

反勾號字元 (`) 通常是在鍵盤左上方 ESC 鍵底下的按鍵上。

指令程式中的 SQL Server 識別碼

某些 SQL Server 指令程式有一個參數會將識別碼當做輸入。參數值通常會以加上引號的字串常數形式提供,或是在字串變數中提供。當以字串常數的形式或是在變數中提供識別碼時,不會與 Windows PowerShell 支援的字元集合發生衝突。