2009年6月10日

如何查詢 SQL Server 的授權狀態

在 SQL Server 7.0 的時代,要查詢授權狀態,只需使用控制台中的「授權」,即可查詢或新增授權。

到了 SQL Server 2000 時,欲查詢 SQL Server 授權狀態可以開啟控制台中的「SQL Server 2000 授權安裝程式」


或是使用 regedit.exe 也可以看到機碼的相關設定(黃色所圈選的地方):


第三種方式,就是使用 T-SQL 指令進行查詢:
SELECT ServerProperty('LicenseType') 授權方式, ServerProperty('NumLicenses') 授權個數


查詢結果:


如果是採用「以每一處理器」為授權模式,相關機碼所代表的意義如下:
名稱
類型
資料
說明
Mode
DWORD
2
每一處理器(Per Processor)
ConcurrentLimit
DWORD
4
處理器個數為 4 個
(會隨您安裝的環境顯示其實際的個數)

「以每一機座」為授權模式的機碼說明如下:
名稱 類型 資料 說明
Mode DWORD 0 每一機座(Per Seat)
ConcurrentLimit DWORD 10 可連線的用戶端個數為 10 個
(會隨您於安裝時,所設定的個數而異)


因此,如果要調整授權的類型,當然就是修改機碼,要記得於修改機碼之後,重新啟動 SQL Server 服務,才能透過先前的 T-SQL 指令來查詢授權模式。

執行的結果第 1 個欄位(亦即授權方式)值是下列 3 種之一:
  • PER_SEAT
    每一基座模式
  • PER_PROCESSOR
    每一處理器模式
  • DISABLED
    停用授權


執行的結果第 2 個欄位(授權個數)是:
  • 如果在每一基座模式中,便是這個 SQL Server 執行個體所登錄的用戶端授權數目。
  • 如果在每一處理器模式中,便是這個 SQL Server 執行個體所登錄的處理器數目。
  • 當第 1 個欄位的結果是 DISABLED 時,便會傳回 NULL


但是從 SQL Server 2005 開始,於安裝時,根本就沒有讓我們選擇「以每一處理器」「以每一機座」的授權模式,所以於安裝完畢之後,在控制台裡的授權安裝程式當然也沒了。此時,欲查詢授權狀態只能找出當初購買 SQL Server 的紙本授權書,如下圖所示即為 1 個用戶端授權(Client Access License)


根據 Microsoft SQL Server Support Blog 裡的 Tracking License Information in SQL 2005 一文指出,可以自行加入並編輯相關的機碼,以便透過 T-SQL 進行查詢。SQL Server 2005 的授權模式機碼位置在:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\90\MSSQLLicenseInfo\MSSQL9.00

但是個人怎麼測試,結果都如下圖:

如果有人成功設定完成,麻煩告訴我,讓我知道要如何去改!

2009年5月20日

如何使用 T-SQL 語法查出某個欄位的累積值

假設有如下所示的資料表,要如何透過 T-SQL 指令計算出數量的累積值(就是最下面那個表格中,「累計庫存」黃色的欄位)?
日期 類別 單號 入庫數量 出庫數量
2009/01/20 進貨 D001 300 0
2009/01/20 進貨 D002 600 0
2009/01/21 銷貨 D003 0 -300
2009/01/21 銷貨 D004 0 -600
2009/02/02 進貨 D005 300 0
2009/02/02 進貨 D006 2400 0
2009/02/03 銷貨 D007 0 -300
2009/02/03 銷貨 D008 0 -2400
2009/02/25 進貨 D009 900 0
2009/02/26 進貨 D010 600 0
2009/02/27 銷貨 D011 0 -900
2009/02/27 銷貨 D012 0 -600


日期 類別 單號 入庫數量 出庫數量 累計庫存
2009/01/20 進貨 D001 300 0 300
2009/01/20 進貨 D002 600 0 900
2009/01/21 銷貨 D003 0 -300 600
2009/01/21 銷貨 D004 0 -600 0
2009/02/02 進貨 D005 300 0 300
2009/02/02 進貨 D006 2400 0 2700
2009/02/03 銷貨 D007 0 -300 2400
2009/02/03 銷貨 D008 0 -2400 0
2009/02/25 進貨 D009 900 0 900
2009/02/26 進貨 D010 600 0 1500
2009/02/27 銷貨 D011 0 -900 600
2009/02/27 銷貨 D012 0 -600 0

由於這個資料表有個欄位「單號」是獨一的(Unique),且後一個單號的值會比前一個單號的值還大,因此透過這個欄位,我們可以使用下面的 T-SQL 指令動態計算出「累計庫存」的數值:

SELECT 日期, 類別, 單號, 入庫數量, 出庫數量,
  (SELECT SUM(入庫數量 + 出庫數量) FROM ALEX AS ONE
    WHERE TWO.單號 >= ONE.單號) AS 累計庫存
FROM ALEX AS TWO

2009年4月24日

關於安裝 SQL Server 2008、Visual Studio 2008 SP1 的注意事項

因為 SQL Server 2008 RTM 需要用到 Visual Studio 2008 SP1 所內含的某些元件,所以於安裝 SQL Server 2008 時,就會先行檢查是否已經安裝了 Visual Studio 2008 SP1。 以下,我們分幾種狀況來討論:
  • 如果已經安裝了 Visual Studio 2008,你有下列幾種後續的操作選項:
    • 請先安裝 Visual Studio 2008 SP1,然後再安裝 SQL Server 2008。
    • 先完整移除 Visual Studio 2008,然後安裝 SQL Server 2008,接著依序安裝 Visual Studio 2008 跟 Visual Studio 2008 SP1。
    • 於安裝 SQL Server 2008 時,先不要勾選下面這 3 個選項:
      • Business Intelligence Development Studio
      • Integration Services
      • 管理工具,不論是「基本」「完整」(Microsoft 的翻譯有錯,翻成「完成」
      等到日後有需要上述 3 個選項時,再來安裝 Visual Studio 2008 SP1 跟其他的 SQL Server 2008 選項。
  • 如果沒安裝 Visual Studio 2008,當然就是先安裝 SQL Server 2008,然後依序安裝 Visual Studio 2008 跟 Visual Studio 2008 SP1。

2009年4月3日

如何在 64位元 Windows 作業系統中,開啟 32 位元的檔案總管

有些檔案總管的介面擴充程式(稱為 Shell Extension)只有推出 32 位元版本,此時如欲在 64位元 Windows 作業系統使用,必須開啟 32 位元的檔案總管才行。

啟用的方式很簡單,只需在「開始」「執行」對話方塊中,鍵入如下的指令即可:
%SystemRoot%\syswow64\explorer.exe /separate

您亦可將上面的指令,在桌面上建立成一個捷徑,並指派一個快捷鍵給該捷徑,如此一來,爾後欲使用 32 位元的檔案總管,只需按下事先指定的快捷鍵即可。

之所以需要如此操作是因為,在 64 位元 Windows 作業系統上執行的 64 位元處理程序,是無法載入某些程式功能所需的 32 位元 .dll 檔案,因此改用 32 位元的檔案總管就可以解決該問題。