顯示具有 SQLPSX 標籤的文章。 顯示所有文章
顯示具有 SQLPSX 標籤的文章。 顯示所有文章

2011年6月4日

使用 Windows PowerShell 將 SQL Server 資料匯出成 .csv 檔案

先前「使用 Windows PowerShell 將資料匯出成 .html 檔案(含安裝 SQLPSX 模組教學)」一文說明使用 CodePlex 的 SQL Server Powershell Extensions(簡稱 SQLPSX)專案,可以將資料匯出成 HTML 格式。

此次則是要介紹如何在 Windows PowerShell 透過 SQLPSX,並使用 Windows PowerShell 內建的 ConvertTo-CSV 指令(Cmdlet)產生以逗點分隔的內容,再搭配導向功能,將 Microsoft SQL Server 資料輸出成 .csv 檔。

▼ 使用 Microsoft Excel 觀看輸出的 .csv 檔
使用 Microsoft Excel 觀看 SQLPSX 輸出的 .csv 檔

在 Windows PowerSehll 輸入如下的指令:

Get-SqlData ".\SqlExpress" 北風貿易 "SELECT 員工編號, 身份證字號, 姓名 FROM 章立民研究室" | ConvertTo-Csv > d:\章立民研究室.csv

上面的指令會從本機電腦中,名稱為 SqlExpress 的 SQL Server Express 執行個體中的北風貿易資料庫,找出章立民研究室資料表中的所有資料,但只顯示 3 個欄位,接著將查詢結果轉換成 csv 格式,最後再導向輸出到 d:\章立民研究室.csv

當您使用文字編輯器(例如:記事本)開啟該 .csv 檔時,會發現到第 1 列多了 #TYPE System.Data.DataRow 這樣的文字,而第 2 列才是欄位名稱的清單,第 3 列之後才是真正從資料庫匯出的資料。

▼ 匯出的 .csv 檔第 1 列會有型別資訊標頭
匯出的 .csv 檔第 1 列會有型別資訊標頭

如欲避免產生第 1 列的文字(亦即物件型別的資訊標頭),可在 ConvertTo-CSV 指令加上 -NoTypeInformation 參數,這樣才不會產生型別資訊標頭。 所以完整的指令為:

Get-SqlData ".\SqlExpress" 北風貿易 "SELECT 員工編號, 身份證字號, 姓名 FROM 章立民研究室" | ConvertTo-Csv -NoTypeInformation > d:\章立民研究室.csv
關於 SQLPSX 模組詳細的指令說明,可在此處找到。

2011年4月3日

安裝教學:SQL Server Powershell Extensions (SQLPSX) v2.3.2.1

先前「使用 Windows PowerShell 將資料匯出成 .html 檔案(含安裝 SQLPSX 模組教學)」一文說明使用 CodePlex 的 SQL Server Powershell Extensions(簡稱 SQLPSX)專案,可以將資料匯出成 HTML 格式。結果在發文之後的幾天(2010 年 11 月 6 日),SQLPSX 又出新版:2.3 版,安裝檔的名稱從 SQLPSX_Install_32.exe、SQLPSX_Install_64.exe,改成 SQLPSX.msi。這麼一改,安裝時,就無須注意作業系統版本是 32 還是 64 位元,真是太方便了。

沒想到,一個多月之後(2010 年 12 月 11 日),發行了 2.3.1 版;2011 年 3 月 13 日,再推出 2.3.2.1 版,開始支援存取查詢 MySQL 資料庫。上述幾個版本之差異如下所列:

2.3 版 2.3.1 版 2.3.2.1 版
10 個模組
(開始支援「以原則為基礎的管理」,亦即  PBM)
12 個模組
(多了模組:PerfCounter、SQLProfiler(此模組僅能用於 x86 的環境中)
13 個模組
(多了模組:MySQLLib,這表示 SQLPSX 也支援 MySQL)
137 個函式 155 個函式 163 個函式、2 個 cmdlet、7 個腳本

前置作業

安裝 SQLPSX v2.3.2.1 的方式很簡單,但在安裝之前,您的電腦必須已經安裝下列元件並做好設定:

安裝 SQLPSX 模組

  1. 在下載的 SQLPSX.msi 檔案上,連按兩下滑鼠左鍵 。
  2. 此時會出現 SQLPSX 安裝精靈,按下「Next」按鈕。
    SQLPSX 安裝精靈
  3. 勾選「I accept the terms in the License Agreement」,然後按下「Next」按鈕。
    接受授權同意書
  4. 按下「Next」按鈕。
    一般來說,是不需要修改安裝的路徑,除非您希望所有使用者皆可使用,此時就請考慮安裝到所有人皆有權限可存取的目錄,同時記得替環境變數 PSModulePath 加上剛修改的自訂路徑
    指定安裝目錄
  5. 按下「Install」按鈕。
    開始安裝
  6. 當出現「使用者帳戶控制」對話視窗,請按下「是」按鈕,並稍待片刻。
    使用者帳戶控制
  7. 按下「Finish」按鈕。
    安裝完成

啟用 SQLPSX 模組

於安裝 SQLPSX 完畢之後,當您開啟 Windows PowerShell 時,並不會自動載入 SQLPSX 模組,需自行載入相關的模組才行,例如要查詢電腦名稱 ALEX-PC 上,預設的 SQL Server 執行個體(亦即執行個體名稱為 MSSQLServer)之相關  SMO  資訊,就要先載入名稱為 SQLServer 的模組,並呼叫  Get-SqlServer 函式

Import-Module SQLServer
Get-SqlServer "ALEX-PC"

▼ 載入特定模組,並執行某個函式
載入特定模組,並執行某個函式

個別載入 SQLPSX 模組的指令如下:

Import-Module SQLServer
Import-Module adoLib
Import-Module Agent
Import-Module PerfCounters
Import-Module Repl
Import-Module ShowMbrs
Import-Module SQLIse
Import-Module SQLMaint
Import-Module SQLParser
Import-Module SQLProfiler
Import-Module SSIS
Import-Module OracleClient
Import-Module OracleIse

您當然可以實際所需,僅載入會使用到的模組。不過這樣的操作方式,還不是挺方便的,因為要輸入多次的載入指令。用下面這個指令,就可一次載入數個 SQLPSX 模組:

Import-Module SQLPSX

▼ 一次載入數個 SQLPSX 模組
一次載入數個 SQLPSX 模組

然而這樣子,有 2 個模組(PerfCountersSQLProfiler)並沒被載入。原因在於原作者忘了修改位於 %UserProfile%\Documents\WindowsPowerShell\Modules\SQLPSX (該路徑為 Windows Vista 之後的作業系統,如上面安裝步驟 4. 中所顯示的路徑。若您的作業系統為 Vista 之前,請自行將 Documents 調整成 My Documents 或實際的路徑名稱)目錄中的 SQLPSX.psm1,所以請使用您熟悉的文字編輯器開啟該檔案,找到 $PSXloadModules += 該行,然後於該行的後面,加入如下的文字:

,"PerfCounters","SQLProfiler"

▼ 修改 SQLPSX.psm1 設定
修改 SQLPSX.psm1 設定

如何知道有哪些模組可供載入?

這個問題跟 SQLPSX 沒什麼關係,使用下面的指令會顯示 Windows PowerShell 有哪些模組可供載入:
Get-Module -ListAvailable

可以一開啟 Windows PowerShell 就載入 SQLPSX 相關的模組嗎?

難道沒有辦法類似 DOS  時代,使用批次檔 Autoexec.bat 事先載入相關模組嗎?答案是肯定的,請依照下列步驟進行操作:

  1. 開啟 Windows PowerShell,輸入下面的指令,以便建立目前這個使用者的 Windows PowerShell 設定檔:
    notepad $Profile
  2. 此時會開啟記事本,並出現找不到檔案的提示訊息,按下「是」按鈕,開始編輯設定檔。請將下面的內容複製下來,然後貼到記事本,接著存檔(下面的路徑適用於 Windows Vista 之後的作業系統,若您的作業系統為 Vista 之前,請自行將 Documents 調整成 My Documents 或實際的位置與名稱):
    Import-Module $Home\Documents\WindowsPowerShell\Modules\SQLPSX\SQLPSX.psm1

    ▼ 找不到檔案的提示訊息
     找不到檔案的提示訊息
    請注意:
    $Home
    變數是指目前使用者的主目錄,此步驟就是在目前使用者的主目錄下的 Documents\WindowsPowerShell 目錄,建立 Microsoft.PowerShell_profile.ps1 檔。
  3. 關閉 Windows PowerShell,然後再開啟它,此時應該會看到如下的畫面,即表示成功自動載入 SQLPSX 模組了。開懷大笑

    ▼ 成功自動載入 SQLPSX 模組
    成功自動載入 SQLPSX 模組
    請注意:
    SQLProfiler 模組僅能執行於 PowerShell x86 中,原因請看圖:

Windows PowerShell 還有個整合式指令碼環境(簡稱  ISE)是一個以 GUI 為介面的應用程式,可讓我們在一個整合式的環境中撰寫、執行和測試指令碼與模組。所以他具有語法標色、TAB 自動完成、視覺化偵錯、Unicode 相容性、即時線上說明等,提供豐富的指令碼撰寫體驗。欲一開啟 ISE 中,也能自動載入 SQLPSX 模組,也需要按照上述的操作步驟進行設定,此時所編輯的設定檔名為:Microsoft.PowerShellISE_profile.ps1,而不是 Microsoft.PowerShell_profile.ps1。

2010年11月3日

使用 Windows PowerShell 將資料匯出成 .html 檔案(含安裝 SQLPSX 模組教學)

CodePlex 有個 SQL Server Powershell Extensions(簡稱 SQLPSX)專案,裡面提供數個資料庫(不單支援 Microsoft SQL Server,連 Oracle 都支援,但前提是您的電腦必須有 Oracle 相關的組件才行)的模組(Module),其中有個 Get-SqlData 方法可以執行 T-SQL 查詢,並回傳一個 DataRow 物件。

由於回傳的是 DataRow 物件,所以可以透過 Windows PowerShell 內建的 ConvertTo-Html 指令(Cmdlet),將 DataRow 物件轉換成 HTML 格式,接著透過導向方式,輸出成 .html 檔即可在瀏覽器中顯示。

前置作業

安裝 SQLPSX 的方式很簡單,但在安裝之前,您的電腦必須已經安裝下列元件並做好設定:

安裝 SQLPSX 模組

下載內含安裝程式的壓縮檔:SQLPSX_V2_Install.zip,將其解開,然後依照作業系統的位元是 3264 的不同,執行相對應的安裝程式 SQLPSX_Install_32.exe、SQLPSX_Install_64.exe,然後依照畫面指示進行操作。

▼ 開始進行安裝
開始進行安裝

▼ 指定壓縮檔
指定壓縮檔

▼ 安裝完畢,最下方的狀態列會顯示:SQLPSX - Installation completed
安裝完畢

開啟 Windows PowerShell,輸入下面的指令,以便建立目前這個使用者的 Windows PowerShell 設定檔:

notepad $Profile

此時會開啟記事本並出現找不到檔案的訊息,按下「是」按鈕,開始編輯設定檔。請將下面的內容複製下來,然後貼到記事本,接著存檔(下面的路徑適用於 Windows Vista 之後的作業系統,若您的作業系統為 Vista 之前,請自行將 Documents 調整成 My Documents 或實際的位置與名稱):

Import-Module $Home\Documents\WindowsPowerShell\Modules\SQLPSX\SQLPSX.psm1

請注意:
$Home
變數是指目前使用者的主目錄 。

關閉 Windows PowerShell,然後再開啟它,此時應該會看到如下的畫面,即表示成功安裝 SQLPSX 模組了。開懷大笑

▼ 安裝 SQLPSX 模組成功了
成功安裝 SQLPSX 模組

使用 SQLPSX 模組

在 Windows PowerSehll 輸入如下的指令:

Get-SqlData ".\SqlExpress" 北風貿易 "SELECT * FROM 章立民研究室" | ConvertTo-Html -Property 員工編號, 身份證字號, 姓名 -Title "員工資料表" > d:\章立民研究室.html

上面的指令會從名稱為 SqlExpress 的 SQL Server Express 執行個體中的北風貿易資料庫,找出章立民研究室資料表中的所有資料,接著將輸出結果轉換成 HTML 格式,且只輸出 3 個欄位,並將 .html 的 Title 屬性設定成 員工資料表,然後輸出到 d:\章立民研究室.html

▼ 使用 Windows PowerShell 將資料匯出成 .html 檔案
使用 Windows PowerShell 將資料匯出成 .html 檔案

▼ 檢視 .html 原始碼
檢視 .html 原始碼

  1. 其實是可以在 T-SQL 語法中的 SELECT 子句指定要哪些欄位,我只是想凸顯出 PowerShell ConvertTo-Html 有個 Property 屬性也可指定要顯示哪些欄位。
  2. 至於其他 SQLPSX 模組詳細的指令說明,可在此處找到。