PowerShell 2.0 實踐(十四)管理 SQL Server 2008 R2(2)
上一次我們熟悉了SQL Server 2008 R2的新特性與PowerShell與SQL Server相關的擴展,這些擴展背后實際上還是使用的SMO(SQL Server對象模型),可以在MSDN上查看。SQL Server 的PowerShell擴展可以在這里查看。本次我們繼續來測試相關的命令,學習SMO中的對象。
本系列所有測試腳本均在Windows Server 2008 R2 DataCenter (PowerShell 2.0) + PowerGUI Script Editor Free Edition x64中測試通過。
SQL Server系列使用了SQL Server 2008 R2 DataCenter x64
轉載請注明出處:http://www.rzrgm.cn/brooks-dotnet/archive/2010/10/13/1850621.html
1、查詢本機默認實例下所有的數據庫、包含的表、存儲過程、視圖、觸發器、用戶自定義函數:
Set-Location SQLSERVER:\SQL\BrooksPC\DEFAULT\Databases
Get-ChildItem | SELECT DisplayName, Tables, StoredProcedures, Views, Triggers, UserDefinedFunctions | Format-Table
運行結果:
其實SQLSERVER:\SQL\BrooksPC\DEFAULT\Databases目錄下包含的內容遠不止這些,還有數據庫用戶、程序集等很多重要的對象。
還可以查看遠程數據庫上的對象:
家里使用了無線路由,連接另一臺筆記本。
Set-Location SQLSERVER:\SQL\192.168.0.101\DEFAULT\Databases
Get-ChildItem | Select Name, Tables
運行結果:
需要注意的是若目錄中包含特殊字符,則需要編碼、解碼:(參見MSDN)
Character | \ | / | : | % | < | > | * | ? | [ | ] | | |
Hexadecimal Encoding | %5C | %2F | %3A | %25 | %3C | %3E | %2A | %3F | %5B | %5D | %7C |
例如:
Set-Location (Encode-SqlName "Table:Test")
Set-Location (Decode-SqlName "Table%3ATest")
若一些特殊字符在SQL Server中合法卻在PowerShell中有特殊含義,如注釋:#。
則需要用`轉義:
Set-LocationSQLSERVER:\SQL\BrooksPC\DEFAULT\Databases\`#MyTempTable
Get-ChildItem
2、執行SQL語句:
Invoke-Sqlcmd可以執行SQL或XQuery語句:
Invoke-Sqlcmd -Query "SELECT @@VERSION;"
運行結果:
GUI中可以看到完整結果:
同樣可以遠程執行SQL語句:
Invoke-Sqlcmd -Query "SELECT @@VERSION;" -HostName 192.168.0.101
運行結果:
查詢Northwind中的Customer表:
Invoke-Sqlcmd -Query "SELECT * FROM dbo.Customers;" -ServerInstance "192.168.0.101" -Database "Northwind" -Username "sa" -Password "******" | Format-Table
運行結果:
調用存儲過程:
Invoke-Sqlcmd -Query "EXECUTE sp_PKeys 'Customers';" -ServerInstance "192.168.0.101" -Database "Northwind" -Username "sa" -Password "******" | Format-Table
運行結果:
小結:
本次進一步熟悉了SQL Server 目錄中的結構以及獲取本地及遠程數據庫服務的方法,通過Invoke-Sqlcmd可以調用SQL語句進行查詢,支持本地及遠程數據庫實例。后續篇章將繼續練習SMO、SQL Server目錄的用法。

浙公網安備 33010602011771號