搜尋本站文章

2011-01-27

新手學安裝SQL Server 2008「容錯移轉叢集(Failover Cluster)」(1)

在「高可用性(Hign Availability)」解決方案中,使用「容錯移轉叢集(Failover Cluster)」技術,可以提供自動化的移轉機制,而且也無須修改前端應用程式,這會是很方便與防護較高的備援機制。
但卻是需要使用到外接的儲存設備,以及較為複雜的建置、維護等方式。

簡單來講,「容錯移轉叢集」所提供的備援機制之運作方式是:前台部分,由兩部「節點伺服器(Node Server)」組成一部對外服務用的「虛擬伺服器(Virtual Server)」,客戶端的應用程式皆是連接到此「虛擬伺服器」來存取所需的服務資源;而在後台部分,平時僅由一台「節點伺服器」來擔任「虛擬伺服器」,萬一現行服務的「節點伺服器」因故發生故障,系統可以自動化的移轉到另一台備援用的「節點伺服器」,接續擔任「虛擬伺服器」的工作。

但值得留意的是,「容錯移轉叢集」機制,是無法防護在「叢集磁碟」上的損毀錯誤。



更多相關的技術文章,請參考:DB World 資料庫專家電子雜誌
http://www.dbworld.com.tw/

實作練習:建立 Database Mail 與 SQL Agent Mail,以 SQL Server 2008 為例

適用環境:SQL Server 2008 / SQL Server 2008 R2

請參考以下的實作練習:
實作練習:建立 Database Mail 與 SQL Agent Mail,以 SQL Server 2008 為例

工作1:設定 Database Mail

步驟01. 執行 SSMS 管理工具,使用「物件總管」,註冊指定的執行個體。
步驟02. 展開「管理」節點,點選「Database Mail」,滑鼠右鍵,選取「設定 Database Mail」。請參考下圖所示:


步驟03. 在「Database Mail 組態精靈」視窗,點選「下一步」。請參考下圖所示:


步驟04. 在「選取組態工作」頁面,點選「執行下列工作以設定 Database Mail」,點選「下一步」。請參考下圖所示:


步驟05. 依據預設值,Database Mail 功能是被停用的,在此請點選「是」來啟用Database Mail 功能。請參考下圖所示:

步驟06. 在「新增設定檔」頁面,點選「加入」。請參考下圖所示:


步驟07. 在「新增 Database Mail 帳戶」視窗,輸入 SMTP 帳戶所需的選項值,請點選「確定」。請參考下圖所示:


步驟08. 在「新增設定檔」頁面,確認已經建立好的 SMTP 帳戶資訊,點選「下一步」。請參考下圖所示:


步驟09. 在「管理設定檔安全性」視窗,點選「公用設定檔」頁面,設定以下的選項值,點選「下一步」。請參考下圖所示:
(1)在「公用」區域,勾選。
(2)在「預設設定檔」區域,選擇「是」。


步驟10. 在「設定系統參數」頁面,點選「下一步」。請參考下圖所示:


步驟11. 在「完成精靈」頁面,點選「完成」。請參考下圖所示:


步驟12. 在「正在設定...」頁面,點選「關閉」。請參考下圖所示:



工作2:測試 Database Mail 的功能

步驟01. 執行 SSMS 管理工具,使用「物件總管」,註冊指定的執行個體。
步驟02. 展開「管理」節點,點選「Database Mail」,滑鼠右鍵,選取「傳送測試電子郵件」。請參考下圖所示:


步驟03. 在「從xxx傳送測試電子郵件視窗」視窗,設定以下的選項值,點選「傳送測試電子郵件」。請參考下圖所示:
(1)在「收件者」區域,輸入目標的電子郵件位址。


步驟04. 點選「關閉」。

步驟05. 在「Database Mail 測試電子郵件」視窗,點選「確定」。請參考下圖所示:



步驟06. 執行收信軟體,例如:Microsoft Outlook來接收電子郵件。請參考下圖所示:




工作3. 設定 SQL Agent Mail

步驟01. 執行 SSMS 管理工具,使用「物件總管」,註冊指定的執行個體。
步驟02. 點選「SQL Server Agent」節點,滑鼠右鍵,選取「屬性」。

步驟03. 在「SQL Agent 屬性」視窗,點選「警示系統」頁面,設定以下的選項值,請參考下圖所示:
(1)在「郵件工作階段」區域,勾選「啟用郵件設定檔」。
(2)在「郵件系統」區域,選擇「Database Mail」。



步驟04. 點選「確定」。
步驟05. 停止「SQL Server Agent」服務,再啟動「SQL Server Agent」服務。
完成設定 SQL Agent Mail 作業。



參考資料:
Database Mail
http://technet.microsoft.com/zh-tw/library/ms175887.aspx

2011-01-16

好康放送:上課贈送微軟 TechNet 專業版,Microsoft 軟體免費使用,產品啟動序號永久有效

即日起凡報名恆逸 2011年1月份起開班之以下任一指定微軟認證課程,即贈微軟TechNet專業版免費一年期。
例如:
(1) TS08SQL:微軟MCTS認證課程之SQL Server 2008資料庫管理
(2) TS08BI:微軟MCTS認證課程之SQL Server 2008 BI開發



可享有免費微軟21種產品、超過400種軟體下載、測試(包含產品啟動序號)。


TechNet數量有限,送完為止。

連結網址:
報名恆逸Windows Server 2008、SQL Server 2008、Visual Studio 2010、Windows 7、虛擬化MCTS認證課程,贈送TechNet一年期優惠
http://www.uuu.com.tw/Public/content/edm/101223_TechNetPromo.htm


官方網址:
Microsoft Learning – 微軟認證 限時限量4合1
http://www.microsoft.com/taiwan/learning/technet_4in1/technet_4in1.mspx

立即加入微軟專業證照認證課程再贈市價兩萬 TechNet 一年自由下載微軟 21 種產品

專業認證重要可見一般,微軟為協助企業快速找到合適的專業人才,並且給予 IT 專業人員一個熟悉微軟技術的肯定,於大中華區市場投注極大的認證資金與資源,現微軟國際專業證照,更已成企業徵才時的重要評比。

為讓更多人有機會輕鬆學習並獲得更多專業技能,即日起參加微軟專業證照認證課程乙堂加測驗,即贈市價兩萬 TechNet 一年自由下載、測試微軟 21 種產品,讓你輕鬆一手掌握最夯專業趨勢,為專業能力再加分。

2011-01-13

對 uniqueidentifier 資料類型的資料行,設定其「預設值(Default)」為 0,也就是 00000000-0000-0000-0000-000000000000

uniqueidentifier 資料類型中儲存做為全域唯一識別碼 (GUID) 使用的 16 位元組二進位值。
GUID 是一種唯一的二進位數字;全世界的電腦都不會產生重複的 GUID 值。

GUID 的主要用途是在有許多站台與許多電腦的網路上指派一個唯一識別碼。

uniqueidentifier 值通常不會定義為常數。您可以利用下列方式指定 uniqueidentifier 常數:
(1) 字元字串格式:'6F9619FF-8B86-D011-B42D-00C04FC964FF'
(2) 二進位格式:0xff19966f868b11d0b42d00c04fc964ff

若要將 uniqueidentifier 資料類型的資料行,設定其「預設值(Default)」為 0,也就是 00000000-0000-0000-0000-000000000000。
可以使用:「字元字串格式」或「二進位格式」。
預期產出的資料值,請參考下圖所示:




以下是使用 SSMS 管理工具的資料表設計介面:

(1) 使用「二進位格式」,輸入:0x,前後需單引號,請參考下圖所示:


或是
(2) 使用「字元字串格式」,輸入: '00000000-0000-0000-0000-000000000000',前後需要有單引號,請參考下圖所示:



請參考以下的程式碼範例:
--EX01. 使用「二進位格式」,設定「預設值」為:0x
USE [Northwind_Dev]
GO
IF  EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[DF_UQ01_UID]') AND type = 'D')
BEGIN
ALTER TABLE [dbo].[tbuniqueidentifier01] DROP CONSTRAINT [DF_UQ01_UID]
END
GO
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[tbuniqueidentifier01 ]') AND type in (N'U'))
DROP TABLE [dbo].[tbuniqueidentifier01]
GO
CREATE TABLE [dbo].[tbuniqueidentifier01](
 [EID] [int] NULL,
 [UID] [uniqueidentifier] NULL
) ON [PRIMARY]
GO
-- 使用「二進位格式」,設定「預設值」為:0x
ALTER TABLE [dbo].[tbuniqueidentifier01] ADD  CONSTRAINT [DF_UQ01_UID]  DEFAULT (0x) FOR [UID]
GO

/*==================================================*/
--EX02. 使用「二進位格式」,設定「預設值」為: '00000000-0000-0000-0000-000000000000'
USE [Northwind_Dev]
GO
IF  EXISTS (SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[DF_UQ02_UID]') AND type = 'D')
BEGIN
ALTER TABLE [dbo].[tbuniqueidentifier02] DROP CONSTRAINT [DF_UQ02_UID]
END
GO
IF  EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[tbuniqueidentifier02]') AND type in (N'U'))
DROP TABLE [dbo].[tbuniqueidentifier02]
GO
CREATE TABLE [dbo].[tbuniqueidentifier02](
 [EID] [int] NULL,
 [UID] [uniqueidentifier] NULL
) ON [PRIMARY]
GO
-- 使用「字元字串格式」,設定「預設值」為: '00000000-0000-0000-0000-000000000000'
ALTER TABLE [dbo].[tbuniqueidentifier02] ADD  CONSTRAINT [DF_UQ02_UID]  DEFAULT ('00000000-0000-0000-0000-000000000000') FOR [UID]
GO


參考資料
使用 Uniqueidentifier 資料
http://msdn.microsoft.com/zh-tw/library/ms190215.aspx

uniqueidentifier (Transact-SQL)
http://msdn.microsoft.com/zh-tw/library/ms187942.aspx

常數 (Transact-SQL)
http://msdn.microsoft.com/zh-tw/library/ms179899.aspx

2011-01-12

新手學SQL Server 2008「資料庫鏡像(Database Mirroring)」(8)

在前一期文章中,介紹了討論實作具有自動容錯移轉的高安全性模式、使用手動容錯移轉、遺失主體伺服器,執行自動容錯移轉、遺失見證伺服器時,執行手動容錯移轉、遺失主體伺服器與見證伺服器時、使用Transact-SQL 陳述式來建置資料庫鏡像、建立資料庫鏡像端點、設定夥伴伺服器等主題。

在本期文章裡,將繼續實作 Transact-SQL 陳述式來建置資料庫鏡像、設定見證伺服器、切換資料庫鏡像的模式與部署資料庫鏡像時的疑難排解等主題。



更多相關的技術文章,請參考:DB World 資料庫專家電子雜誌
http://www.dbworld.com.tw/




參考資料:
新手學SQL Server 2008「資料庫鏡像(Database Mirroring)」(1)
http://sharedderrick.blogspot.com/2010/06/sql-server-2008database-mirroring1.html

新手學SQL Server 2008「資料庫鏡像(Database Mirroring)」(2)
http://sharedderrick.blogspot.com/2010/06/sql-server-2008database-mirroring2.html

新手學SQL Server 2008「資料庫鏡像(Database Mirroring)」(3)
http://sharedderrick.blogspot.com/2010/06/sql-server-2008database-mirroring3.html

新手學SQL Server 2008「資料庫鏡像(Database Mirroring)」(4)
http://sharedderrick.blogspot.com/2010/10/sql-server-2008database-mirroring4.html

新手學SQL Server 2008「資料庫鏡像(Database Mirroring)」(5)
http://sharedderrick.blogspot.com/2010/08/sql-server-2008database-mirroring5.html

新手學SQL Server 2008「資料庫鏡像(Database Mirroring)」(6)
http://sharedderrick.blogspot.com/2010/10/sql-server-2008database-mirroring6.html

新手學SQL Server 2008「資料庫鏡像(Database Mirroring)」(7)
http://sharedderrick.blogspot.com/2010/12/sql-server-2008database-mirroring7.html

2011-01-07

使用 xp_readerrorlog 或 sp_readerrorlog 來讀取 SQL Server Agent「錯誤記錄檔」

依預設,SQL Server Agent 會建立「錯誤記錄檔」來記錄警告與錯誤。

「錯誤記錄檔」中會顯示下列警告和錯誤:
(1)提供有關潛在問題的警告訊息,例如「作業 已於執行時刪除」。
(2)通常需要系統管理員介入的錯誤訊息,例如「無法啟動郵件工作階段」。錯誤訊息可以藉由網路傳送來傳送給特定的使用者或電腦。

SQL Server 至多可以維護九個 SQL Server Agent 錯誤記錄檔。
每個已封存之記錄檔的副檔名都會指出記錄檔的相對存在時間。


例如,.1 的副檔名表示它是最近新封存的錯誤記錄檔,而 .9 的副檔名則表示是最早封存的錯誤記錄檔。

因為執行追蹤訊息會填滿 SQL Server Agent 錯誤記錄檔,所以在預設情況下,並不會寫入錯誤記錄檔。
當錯誤記錄檔滿了,會降低您選取與分析更困難錯誤的能力。


因為記錄檔會增加伺服器的處理負擔,請務必仔細考慮將執行追蹤訊息擷取到錯誤記錄檔是否值得。
一般而言,最好只有在為一個特定問題進行偵錯時,您才擷取所有的訊息。


當 SQL Server Agent 停止時,您可以修改 SQL Server Agent 錯誤記錄檔的位置。
您無法開啟空的錯誤記錄檔。您可以隨時循環使用 SQL Server Agent 記錄檔,無須停止 SQL Server Agent。

請參考下圖所示:



適用環境:SQL Server 2005、2008、2008 R2 版本。


若要以程式方式來分析 SQL Server Agent「錯誤記錄檔」,可以使用 sp_readerrorlog。


sp_readerrorlog 此為 undocumented 的預存程序,可以用來讀取 SQL Server 「錯誤記錄檔」的資料。
但其內部係利用 xp_readerrorlog 來讀取 SQL Server Agent 「錯誤記錄檔」的資料,所以,在此我們直接使用 xp_readerrorlog 來讀取 SQL Server Agent 「錯誤記錄檔」。


xp_readerrorlog 此為 undocumented 的「擴充預存程序(extended stored procedure)」。
所以在參數上的使用上,不是很能確認,或是與未來新的版本之相容性,要請各位讀者留意此事。


請參考以下的範例程式碼的說明:
--01 查詢目前的 SQL Server Agent「錯誤記錄檔」
EXEC master.dbo.xp_readerrorlog 0,2
請參考下圖所示:

--EX2 篩選查詢在目前的 SQL Server Agent「錯誤記錄檔」上,使用的關鍵字為:停止
EXEC master.dbo.xp_readerrorlog 0,2, N'停止'
請參考下圖所示:


--EX3  將目前的SQL Server Agent「錯誤記錄檔」資料,存放到資料表變數內
DECLARE @tbAgentLog TABLE (rid INT IDENTITY, LogDate datetime, ErrorLevel int,Text nvarchar(3950))
 
INSERT @tbAgentLog EXEC master.dbo.xp_readerrorlog 0,2
 
SELECT LogDate N'記錄時間',  ErrorLevel N'錯誤等級', Text N'訊息'
FROM @tbAgentLog
請參考下圖所示:


--EX4 匯入並讀取全部的SQL Server Agent「錯誤記錄檔」
DECLARE @fliecnt int
DECLARE @tbAgentFile TABLE (myfilecnt int, myfiledate datetime, myfilesize int)
DECLARE @tbAgentLog TABLE (rid INT IDENTITY, LogDate datetime, ErrorLevel int,Text nvarchar(3950))

INSERT @tbAgentFile EXEC master.dbo.sp_enumerrorlogs 2

SELECT @fliecnt =MAX(myfilecnt) FROM @tbAgentFile

WHILE (@fliecnt >=0)
BEGIN
 INSERT @tbAgentLog EXEC master.dbo.xp_readerrorlog @fliecnt,2
 SET @fliecnt = @fliecnt -1
END

SELECT LogDate N'記錄時間', 
 CASE WHEN ErrorLevel = 1 THEN N'錯誤'
  WHEN ErrorLevel = 2 THEN N'警告'
  WHEN ErrorLevel = 3 THEN N'資訊'
 END AS N'錯誤等級', 
Text N'訊息'
FROM @tbAgentLog
ORDER BY rid DESC
請參考下圖所示:



參考資料:
使用 SQL Server Agent 錯誤記錄檔
http://msdn.microsoft.com/zh-tw/library/ms175488.aspx

使用 xp_readerrorlog 或 sp_readerrorlog 來讀取 SQL Server 「錯誤記錄檔」
http://sharedderrick.blogspot.com/2011/01/xpreaderrorlog-spreaderrorlog-sql.html

2011-01-06

使用 xp_readerrorlog 或 sp_readerrorlog 來讀取 SQL Server 「錯誤記錄檔」

SQL Server 將特定系統事件和使用者自訂事件記錄到 SQL Server 「錯誤記錄檔」內。
請使用 SQL Server 「錯誤記錄檔」中的資訊來解決 SQL Server 的相關問題。

雖然可以使用 SQL Server Management Studio 管理工具來檢視 SQL Server 「錯誤記錄檔」。
但是每次啟動 SQL Server 的執行個體時,就會建立新的錯誤記錄檔。
若需要進一步篩選資料等分析處理,就需要自行查詢多份「錯誤記錄檔」來比對資料,十分不便。
請參考下圖所示:



適用環境:SQL Server 2005、2008、2008 R2 版本。

若要以程式方式來分析 SQL Server 「錯誤記錄檔」,可以使用 sp_readerrorlog。


sp_readerrorlog 此為 undocumented 的預存程序,可以用來讀取 SQL Server 「錯誤記錄檔」的資料。
但其內部係利用 xp_readerrorlog 來讀取 SQL Server 「錯誤記錄檔」的資料,所以,在此我們直接使用 xp_readerrorlog 來讀取 SQL Server 「錯誤記錄檔」。

xp_readerrorlog 此為 undocumented 的「擴充預存程序(extended stored procedure)」。
所以在參數上的使用上,不是很能確認,或是與未來新的版本之相容性,要請各位讀者留意此事。
筆者將收集到的資料,整理如下:
使用語法:
EXEC master.dbo.xp_readerrorlog @p1, @p2, @p3, @p4, @p5, @p6, @p7

參數說明:
@p1 參數:0 表示目前的錯誤記錄檔,1 表示前一次的錯誤記錄檔之備份,2 表示前二次的錯誤記錄檔之備份,依此類推。
@p2 參數:1 或是 NULL 表示 SQL Server 錯誤記錄檔;2 表示 SQL Server Agent 錯誤記錄檔
@p3 參數:作為要查詢條件字串1。
@p4 參數:作為要查詢條件字串2,與 @p3 參數為 AND 條件式。
@p5 參數:指定錯誤記錄檔要讀取的起始日期。
@p6 參數:指定錯誤記錄檔要讀取的終止日期。
@p7 參數:可以設定查詢出來的資料之排序方式,依據「LogDate」資料行來排序,可以使用「ASC」或「DESC」參數值。


請參考以下的範例程式碼的說明:
--EX1 查詢目前的 SQL Server 「錯誤記錄檔」
EXEC master.dbo.xp_readerrorlog
-- 或是
EXEC master.dbo.xp_readerrorlog 0
請參考下圖所示:

--EX2 篩選查詢在目前的 SQL Server 「錯誤記錄檔」上,所發生的錯誤事件,使用的關鍵字為:Failed 或 錯誤
EXEC master.dbo.xp_readerrorlog 0,1, N'Failed'
EXEC master.dbo.xp_readerrorlog 0,1, N'錯誤'
請參考下圖所示:

--EX3 篩選查詢在目前的 SQL Server 「錯誤記錄檔」上,所發生的錯誤事件,使用的關鍵字為:Failed 或 錯誤,並且加入時間排序
EXEC master.dbo.xp_readerrorlog 0,1, N'Failed',NULL,NULL,NULL,'DESC'
EXEC master.dbo.xp_readerrorlog 0,1, N'錯誤',NULL,NULL,NULL,'DESC'
請參考下圖所示:

--EX4  將目前的 SQL Server「錯誤記錄檔」資料,存放到資料表變數內
DECLARE @tbLog TABLE (rid INT IDENTITY, LogDate datetime, ProcessInfo nvarchar(10),Text nvarchar(3950))

INSERT @tbLog EXEC master.dbo.xp_readerrorlog 0,1

SELECT * FROM @tbLog
ORDER BY 2
請參考下圖所示:


--EX5 匯入並讀取全部的 SQL Server「錯誤記錄檔」
DECLARE @fliecnt int
DECLARE @tbFile TABLE (myfilecnt int, myfiledate datetime, myfilesize int)
DECLARE @tbLog TABLE (rid INT IDENTITY, LogDate datetime, ProcessInfo nvarchar(10),Text nvarchar(3950))

INSERT @tbFile EXEC master.dbo.sp_enumerrorlogs

SELECT @fliecnt =MAX(myfilecnt) FROM @tbFile

WHILE (@fliecnt >=0)
BEGIN
 INSERT @tbLog EXEC master.dbo.xp_readerrorlog @fliecnt,1
 SET @fliecnt = @fliecnt -1
END

SELECT LogDate N'記錄時間', ProcessInfo N'來源', Text N'訊息' 
FROM @tbLog
ORDER BY rid DESC
請參考下圖所示:


--EX6 匯入並讀取全部的 SQL Server「錯誤記錄檔」,篩選出有發生錯誤的相關資訊
DECLARE @fliecnt int
DECLARE @tbFile TABLE (myfilecnt int, myfiledate datetime, myfilesize int)
DECLARE @tbLog TABLE (rid INT IDENTITY, LogDate datetime, ProcessInfo nvarchar(10),Text nvarchar(3950))
DECLARE @tbLog2 TABLE (rid INT, LogDate datetime, ProcessInfo nvarchar(10),Text nvarchar(3950))

INSERT @tbFile EXEC master.dbo.sp_enumerrorlogs

SELECT @fliecnt =MAX(myfilecnt) FROM @tbFile

WHILE (@fliecnt >=0)
BEGIN
 INSERT @tbLog EXEC master.dbo.xp_readerrorlog @fliecnt,1, NULL,NULL,NULL,NULL,'ASC'
 SET @fliecnt = @fliecnt -1
END

INSERT  @tbLog2 SELECT * FROM @tbLog WHERE Text LIKE N'%錯誤%' OR Text LIKE N'%Error%' AND Text NOT LIKE N'%SPN%'

SELECT LogDate N'記錄時間', ProcessInfo N'來源', Text N'訊息'
FROM (   SELECT * FROM @tbLog WHERE rid IN (SELECT rid+1 FROM @tbLog2)
    UNION ALL
    SELECT * FROM @tbLog2) tbunion
ORDER BY LogDate DESC ,rid DESC
請參考下圖所示:




--EX7 讀取目前的 SQL Server「錯誤記錄檔」資料,查詢 SQL Server 最近一次的啟動日期時間
DECLARE @tbLog TABLE (rid INT IDENTITY, LogDate datetime, ProcessInfo nvarchar(10),Text nvarchar(3950))
DECLARE @BootDate datetime

INSERT @tbLog EXEC master.dbo.xp_readerrorlog 0,1,'Starting up database ''master'''

SELECT @BootDate=LogDate FROM @tbLog

SELECT @BootDate N'最近一次的啟動日期時間'
請參考下圖所示:


參考資料:
設定SQL Server「錯誤記錄檔(Error log file)」的保存份數
http://sharedderrick.blogspot.com/2010/04/sql-servererror-log-file.html

FIX: Xp_readerrorlog 命令在 SQL Server 2005 和 SQL Server 2008 中的 [執行會停止回應] 及 [執行] 命令增加為 100%的 CPU 使用量
http://support.microsoft.com/kb/973524

監視錯誤記錄
http://msdn.microsoft.com/zh-tw/library/ms187885.aspx

檢視 SQL Server 錯誤記錄
http://msdn.microsoft.com/zh-tw/library/ms187885.aspx

使用 xp_readerrorlog 或 sp_readerrorlog 來讀取 SQL Server Agent「錯誤記錄檔」
http://sharedderrick.blogspot.com/2011/01/xpreaderrorlog-spreaderrorlog-sql_07.html

2011-01-02

查詢 SQL Server 的產品版本、版本編號

若要查詢 SQL Server 的產品版本、版本編號等,可以使用以下的範例程式碼:

SELECT RIGHT(LEFT(@@VERSION,25),4) N'產品版本編號' 

-- 查詢相關的版本資料
SELECT RIGHT(LEFT(@@VERSION,25),4) N'產品版本編號' , 
 SERVERPROPERTY('ProductVersion') N'版本編號',
 SERVERPROPERTY('ProductLevel') N'版本層級',
 SERVERPROPERTY('Edition') N'執行個體產品版本',
 DATABASEPROPERTYEX('master','Version') N'資料庫的內部版本號碼',
 @@VERSION N'相關的版本編號、處理器架構、建置日期和作業系統'



以下範例取自 胡百敬老師: 判斷 SQL Server 版本一文,也是很好的參考範例:

DECLARE @ver varchar(2)
SET @ver=LEFT(CONVERT(varchar(20),SERVERPROPERTY('ProductVersion')),CHARINDEX('.',CONVERT(varchar(20),SERVERPROPERTY('ProductVersion')),1)-1)
SELECT
CASE
WHEN @ver='8' THEN '2000'
WHEN @ver='9' THEN '2005'
WHEN @ver='10' THEN '2008'
WHEN @ver='11' THEN '2011'
END AS ProductVersion,
SERVERPROPERTY('ProductLevel') AS ProductLevel,
SERVERPROPERTY('Edition') AS Edition,
SERVERPROPERTY('EngineEdition') AS EngineEdition;


參考資料:
判斷 SQL Server 版本 -- 胡百敬老師
http://byronhu.wordpress.com/2010/12/31/%E5%88%A4%E6%96%B7-sql-server-%E7%89%88%E6%9C%AC/

如何查詢 SQL Server version 版本號碼
http://sharedderrick.blogspot.com/2008/09/sql-server-version.html

SQL Server 2008 R2 版本的資料庫,無法在 SQL Server 2008 版本上使用;Error 948 The database 'xxx' cannot be opened because it is version 661. This server supports version 655 and earlier. A downgrade path is not supported.
http://sharedderrick.blogspot.com/2010/10/sql-server-2008-r2-sql-server-2008.html

SERVERPROPERTY (Transact-SQL)
http://msdn.microsoft.com/zh-tw/library/ms174396.aspx

如何識別 SQL Server 的版本
http://support.microsoft.com/kb/321185/zh-tw