2009年6月30日

SQL Server 2008 Management Studio Express 何處尋

Microsoft SQL Server 2008 Management Studio Express(簡稱 SSMSE)提供了一個免費的整合式管理介面,讓您存取、設定、管理、和開發 SQL Server 相關的元件。

如果您安裝了 SQL Server 2008 Express,而非 SQL Server 2008 Express with Tools 或 SQL Server 2008 Express with Advanced Services,就必須自行下載並安裝 Microsoft SQL Server 2008 Management Studio Express。

下載點:Microsoft SQL Server 2008 Management Studio Express

2009年6月19日

響應環保:MCP 證書數位化

為響應微軟環境計畫(Microsoft Environmental Initiative),從 2009 年 6 月 1 日開始,MCP 證書由傳統的紙本轉換成數位化,以求減少碳粉匣與對環境的衝擊。

從 2009 年七月開始,微軟不再寄送 Welcome Kit,如欲索取紙本證書需負擔運費與處理費才行。

證書數位化的好處在於:

  • 減少浪費碳粉匣
  • 立刻存取您的 MCP 證書
  • 不變的認證與福利

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