搜尋本站文章

2009-06-30

認識 ROUND 函數,以 SQL Server 2008 為例

與幾個朋友討論 ROUND 函數的使用方式,寫一篇文章與各位分享。
請參考以下的範例:

--EX1. 傳回數值,捨入到指定的長度或有效位數。
-- 語法:ROUND ( numeric_expression , length [ ,function ] )
SELECT ROUND(123.9994, 3), ROUND(123.9995, 3), ROUND(123.9996, 3)



01




--EX2. 有關於 0.點的精確數值之轉換
-- 被截斷
SELECT ROUND(0.4, 0)



02







--  判斷需要進位,但卻發生錯誤。
SELECT ROUND(0.5, 0)
/* 回傳錯誤訊息:
訊息 8115,層級 16,狀態 2,行 1
轉換 expression 到資料類型 numeric 時發生算術溢位錯誤。

訊息 8115,層級 16,狀態 2,行 1
Arithmetic overflow error converting expression to data type numeric.
*/

03







-- 使用CAST 函數,明確的資料轉型
SELECT CAST (0.5 AS numeric(2,1))



04




-- 再搭配使用 ROUND 捨入到指定的長度或有效位數。
SELECT ROUND(CAST (0.4 AS numeric(2,1)), 0), ROUND(CAST (0.5 AS numeric(2,1)), 0), ROUND(CAST (0.6 AS numeric(2,1)), 0)



05




-- 或是使用單引號,以字串的類型來做處理。
SELECT ROUND('0.4', 0), ROUND('0.5', 0), ROUND('0.6', 0)



06




--EX3. 捨入到指定的長度或有效位數。
-- 語法:ROUND ( numeric_expression , length [ ,function ] )
SELECT ROUND(150.45, 0), ROUND(150.55, 0),  ROUND(150.65, 0)



07




--EX4. function 指定 0 以外的值時,會截斷
/*
語法:ROUND ( numeric_expression , length [ ,function ] )
當省略 function,或其值為 0 (預設值) 時,會捨入 numeric_expression。
當指定 0 以外的值時,會截斷 numeric_expression。
*/
SELECT ROUND(150.75, 0, 1);



08








以下是摘錄 SQL Server 2008 線上叢書:ROUND (Transact-SQL)

ROUND (Transact-SQL)


傳回數值,捨入到指定的長度或有效位數。


語法:


ROUND ( numeric_expression , length [ ,function ] )


ROUND 一律傳回值。如果 length 是負的,且大於小數點前面的位數,ROUND 會傳回 0。


--


參數說明:


numeric_expression


這是精確數值或近似數值資料類型類別目錄的運算式,但 bit 資料類型除外。


length


這是 numeric_expression 捨入的有效位數。


length 必須是 tinyint、smallint 或 int 類型的運算式。


當 length 是正數時,numeric_expression 會捨入到 length 所指定的十進位數。


當 length 是負數時,numeric_expression 會依照 length 所指定,在小數點左側捨入。


function


這是要執行的作業類型。function 必須是 tinyint、smallint 或 int。


當省略 function,或其值為 0 (預設值) 時,會捨入 numeric_expression。


當指定 0 以外的值時,會截斷 numeric_expression。






參考資料:

ROUND (Transact-SQL)


http://msdn.microsoft.com/en-us/library/ms175003.aspx

2009-06-27

MySQL 的近況-2009/06

整理一下資料,作為參考之用。

MariaDB - Askmonty.org

2009/02/05
Widenius坦承,他因為不滿昇陽在推出MySQL 5.1 GA版時還有許多問題沒解決而提出辭呈。
至於新成立的Monty Program Ab則是一家純開放源碼公司,將致力於Maria儲存引擎專案的開發。

2009/06/01
MySQL創始人擔心MySQL發展受到昇陽併購案影響,他決定另行開發出可替代MySQL的新開源資料庫MariaDB,並成立開源資料庫聯盟整合開發人力和資源。
Michael Widenius承諾:「瑪莉亞資料庫將永遠和MySQL保持相容。未來如果MySQL有任何一項改變或更新,瑪莉亞資料庫也會同步更新。」

參考資料:
MySQL共同創辦人將離開昇陽自創公司
http://www.ithome.com.tw/itadm/article.php?c=53300

Monty Program AbMonty Program Ab
http://askmonty.org/wiki/index.php/MariaDB

MySQL再易主,創始人擔憂前景另創瑪莉亞資料庫
http://www.ithome.com.tw/itadm/article.php?c=55234

2009-06-20

啟用 Enable FILESTREAM ,下載安裝 AdventureWorks2008 範例資料庫(Installing Sample Databases)

如果要安裝 SQL Server 2008 的範例資料庫:AdventureWorks2008。可能需要注意以下的事情:
1. 已經有安裝 Full-Text Search
2. 已經啟用 FILESTREAM






以下是啟用 FILESTREAM 的方法:

以預設的執行個體為例。

工作1. 使用「SQL Server 組態管理員」

1. 執行「開始」\「所有程式」\「Microsoft SQL Server 2008」\「組態工具」\「SQL Server 組態管理員」。

2. 在「SQL Server 組態管理員」視窗,執行以下的參數:
在左邊窗格,點選「SQL Server 服務」頁面。
在右邊窗格,選擇要啟用 FILESTREAM 的 SQL Server 執行個體。以預設執行個體為例,是指:SQL Server(MSSQLSERVER)。
滑鼠右鍵,選取「內容」。





3. 在「SQL Server內容」視窗,執行以下的參數:
點選「FILESTREAM」頁面。
勾選「啟用 FILESTREAM 的 Transact-SQL 存取」。
點選「確定」,完成對「SQL Server內容」視窗的設定。





如果您想要從 Windows 讀取和寫入 FILESTREAM 資料,請按一下 [啟用 FILESTREAM 的檔案 I/O 資料流存取]。在 [Windows 共用名稱] 方塊中,輸入 Windows 共用的名稱。

工作2. 設定 filestream_access_level 選項
1. 執行 SSMS 管理工具,點選「新增查詢」,執行以下的程式碼來啟用 FILESTREAM:

/*
filestream_access_level 選項值之說明:
0 : 針對這個執行個體停用 FILESTREAM 支援。
1 : 針對 Transact-SQL 存取啟用 FILESTREAM。
2 : 針對 Transact-SQL 和 Win32 資料流存取啟用 FILESTREAM。
*/
USE master
GO
EXEC sp_configure filestream_access_level, 2
RECONFIGURE
GO
/*
組態選項 'filestream access level' 從 0 變更為 2。請執行 RECONFIGURE 陳述式來安裝。
FILESTREAM 功能已停用。
請重新啟動 SQL Server 執行個體,讓設定完全生效。
如果 FILESTREAM 資料行中有資料,這些資料在 SQL Server 執行個體重新啟動後將變成無法存取。
*/


2. 重新啟動 SQL Server 執行個體。



參考資料:
下載 SQL Server 範例資料庫; Microsoft SQL Server Product Samples Database
http://www.codeplex.com/MSFTDBProdSamples

下載 AdventureWorks2008 ; SQL Server 2008 product sample databases
http://msftdbprodsamples.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=18407

Installing Sample Databases
http://msftdbprodsamples.codeplex.com/Wiki/View.aspx?title=Installing%20Databases

如何:啟用 FILESTREAM
http://technet.microsoft.com/zh-tw/library/cc645923.aspx

檔案資料流存取層級
http://msdn.microsoft.com/zh-tw/library/cc645956.aspx

2009-06-12

縮小 壓縮 交易記錄檔 (Shrink Transaction Log);以使用 SQL Server 2008/2005 SSMS 管理工具 為例

若您的資料庫因故造成交易記錄檔(Transaction Log,*.ldf)遠大於,資料檔案(例如:*.mdf)時,請參考下圖所示:






資料檔案才 10 MB,但是交易記錄檔卻已經成長為 1 GB。
那要如何 縮小 壓縮 交易記錄檔呢?




本文以使用 SQL Server 2008/2005 SSMS 管理工具為例做討論,請參考以下的方式:

工作1. 截斷交易記錄檔
1. 執行 SSMS 管理工具。在「物件總管」,展開「資料庫」,點選目標資料庫。
2. 滑鼠右鍵,選擇「屬性」。

3. 在「資料庫屬性」視窗,執行以下的參數:
在左邊的「選取頁面」窗格,點選「選項」。
在右邊的「復原模式」方塊,選擇「簡單」。



點選「確定」,關閉「資料庫屬性」視窗。
切換到「簡單」復原模式,系統就會對此資料庫執行截斷交易記錄檔之作業。




在上圖中,可以觀察到交易記錄檔雖然仍佔用 1 GB 的磁碟空間,但實際的空間使用率卻是很低,幾乎都沒有包含資料。



造成無法截斷的原因可能很多,例如:仍有交易在執行中等。所以若您發覺無法及時截斷交易記錄檔,請稍待一下,或許等交易完成後,就可以截斷交易記錄檔。
若等待許久或執行數次後都無法截斷交易記錄,建議您可以查詢系統檢視 sys.databases 中的 log_reuse_wait_desc 資料行的描述說明,找出為何無法截斷的可能因素。



工作2. 壓縮交易記錄檔(Shrink )

1. 執行 SSMS 管理工具。在「物件總管」,展開「資料庫」,點選目標資料庫。
2. 滑鼠右鍵,選擇「屬性」。

3. 在「資料庫屬性」頁面,執行以下選項:
在左邊的「選取頁面」,點選「檔案」。
在右邊的「資料庫檔案」區域,在「檔案類型」區域,點選「記錄檔」的交易記錄檔案。
在「初始大小(MB)」區域下,直接輸入預期縮小下來後的大小,例如:25。這表示將交易記錄檔縮小為 25 MB。




點選「確定」,關閉「資料庫屬性」視窗。



提醒您:
在某些情境,您可以無法縮小為預期的大小。
原因如下:
交易記錄檔的壓縮限制是固定的。記錄中的虛擬記錄檔大小決定了可縮減的大小。
因此,記錄檔絕不能壓縮成比虛擬記錄檔還小。此外,記錄檔縮減的累加單位即等於虛擬記錄檔的大小。

例如,1 GB 的交易記錄檔可由五個 200 MB 的虛擬記錄檔所組成。壓縮交易記錄檔會刪除未使用的虛擬記錄檔,但至少會留下二個虛擬記錄檔。
因為在這個範例中,每個虛擬記錄檔的大小為 200 MB,所以交易記錄最多只能縮小成 400 MB,且一次只能增量 200 MB。

若想要能夠將交易記錄檔的大小縮減,請建立一個小型的交易記錄檔,然後讓它自動擴充,而不要一次就建立一個大型的交易記錄檔。

壓縮交易記錄檔
http://technet.microsoft.com/zh-tw/library/ms178037.aspx

可能會延遲記錄截斷的因素
http://technet.microsoft.com/zh-tw/library/ms345414.aspx



若真無法縮小交易記錄檔,還有以下的變通作法,但資料庫需要離線作業,方法如下:

1. 使用 SSMS 管理工具,「卸離」此資料庫。
2. 利用檔案總管,修改此交易記錄檔案的名稱。

3. 再度使用 SSMS 管理工具,「附加」此資料庫。
在「附加資料庫」視窗,在右下方的窗格內,選取指定的「記錄檔」之資料列,在「訊息」區域,也會被標示為「找不到」。
點選下方的「移除」,刪除此「記錄檔」。






再點選「確定」,進行附加資料庫作業。




觀察檔案大小:





若是為 SQL Server 2005 的 SSMS 管理工具,則採用以下的方式來壓縮交易記錄檔(Shrink )


1. 執行 SSMS 管理工具。在「物件總管」,展開「資料庫」,點選目標資料庫。
2. 滑鼠右鍵,選擇「工作」\「壓縮」\「檔案」。

3. 在「壓縮檔案」視窗,執行以下參數:
在「檔案類型」方塊,下拉選取「記錄檔」。
在「檔案名稱」方塊,確認這是要縮小的交易記錄檔。
在「壓縮動作」區域,點選「釋放未使用的空間之前,先重新組織頁面」選項,在「將檔案壓縮為」方塊,輸入預期縮小下來後的大小。



再點選「確定」,進行壓縮作業。



參考資料:
交易記錄檔已滿、爆掉;截斷交易記錄檔。(The transaction log for database 'DB1' is full. ;Transaction Log Truncation)
http://sharedderrick.blogspot.com/2009/03/transaction-log-for-database-is-full.html

壓縮交易記錄檔
http://technet.microsoft.com/zh-tw/library/ms178037.aspx

可能會延遲記錄截斷的因素
http://technet.microsoft.com/zh-tw/library/ms345414.aspx

2009-06-09

新手學 SQL Server 2008 「以原則為基礎的管理(Policy-Based Management,PBM)」(3):技術文章




使用「以原則為基礎的管理(Policy-Based Management,PBM)」,可以阻斷惡意非法的行為,或是單純記錄違反「原則」的事件記錄,讓你可以事後檢視歷史紀錄,並思考其處理方式。

在前一篇:「新手學以原則為基礎的管理(2) 」文章中,我們討論了檢視「以原則為基礎的管理」的評估原則之歷史紀錄、搭配使用「警示」、管理原則安全性上的系統資料庫msdb之PolicyAdministratorRole角色,以及實作練習:物件命名規範,以使用者預存程序為例等等主題。

在本期文章中,我們將繼續介紹相關主題:手動評估原則、檢視執行評估作業後的歷史紀錄、增加違反原則的錯誤訊息之可讀性、利用「類別目錄」分類管理各個原則等等。

完整的文章,請參考:第88期之一《新手學以原則為基礎的管理(3)》






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




參考資料:

新手學 SQL Server 2008 「以原則為基礎的管理(Policy-Based Management,PBM)」(1):技術文章http://sharedderrick.blogspot.com/2009/03/sql-server-2008-policy-based.html

新手學 SQL Server 2008 「以原則為基礎的管理(Policy-Based Management,PBM)」(2):技術文章 http://sharedderrick.blogspot.com/2009/03/sql-server-2008-policy-based_18.htm

2009-06-04

Microsoft 將於 2009/07/01 停止 免費提供紙本證書。MCP certificates will transition from paper to digital format


以下為原文的說明:
MCP certificates are now available for download

In accordance with the effort of Microsoft to reduce the company's carbon footprint and impact on the environment, starting June 1, 2009, MCP certificates will transition from paper to digital format. If you would like to order a printed certificate, this option will be available starting in July. You must pay shipping and handling fees for printed certificates.


02_電子證書之說明




摘錄重要,整理如下:
為了節能省碳,由 2009/07/01 開始,Microsoft 提供電子證書,但不提供紙本證書。

若您需要紙本證書,可能需要到 MCP 網站登記,並支付相關的運費、手續費與紙本印刷費用。

一般而言,上網下載電子證書是很方便的作法,也不用等待郵遞時間,亦可為地球環保盡一份心力。

參考網址:
MCP Home Page
https://mcp.microsoft.com/mcp/default.mspx

Microsoft Environment Innovation for a Sustainable Environmenthttp://www.microsoft.com/environment/

2009-06-02

Windows Server 2008 SP2(Service Pack 2) 繁體中文版

經由璉大的通知,得知在 MSDN 訂閱區,已經提供所有語言的 Windows Server 2008 和 Windows Vista 的 SP2(Service Pack 2) 。

07_MSDN下載

08_細節說明

但在 Microsoft Download Center ,目前截至目前為止(2009/6/1),仍僅提供五個語言版本的 SP2版本(英文、法文、德文、日文和西班牙文)可供下載。
http://www.microsoft.com/downloads/en/default.aspx

筆者在 TechNet Plus  訂閱區,也是可以找到所有語言的 Windows Server 2008 和 Windows Vista 的 SP2。

05_TechNetPlus訂閱區

06_細節說明

以下是所有語言的說明:

The "All Languages" file will update products in the following 36 languages: Arabic, Bulgarian, Chinese-Hong Kong SAR, Chinese-Simplified, Chinese-Taiwan, Croatian, Czech, Danish, Dutch, English, Estonian, Finnish, French, German, Greek, Hebrew, Hungarian, Italian, Japanese, Korean, Latvian, Lithuanian, Norwegian, Polish, Portuguese-Brazil, Portuguese-Portugal, Romanian, Russian, Serbian, Slovak, Slovenian, Spanish, Swedish, Thai, Turkish, and Ukrainian.


安裝前的注意事項:

1. 安裝 SP2 更新之前,電腦必須已安裝正版的 Windows Server 2008 含 SP1 或 Windows Vista 含 SP1
Windows Server 2008 發行時已納入 Service Pack 1 程式碼
SP2 是 Windows Server 2008 發行後的第一個 Service Pack

2. SP2 不會將 Windows Server 2008 升級為 Windows Server 2008 R2。
3. Service Pack 2 原本就將 Hyper-V 併入 Windows Server 2008。如果安裝 SP2,不需要另外下載 Hyper-V RTM。


以下為安裝 SP2 的相關畫面:

01_安裝SP2

03_升級後的系統資訊

04_升級後的系統資訊

08_關於 Windows


筆者安裝的是 Windows Server 2008 SP2 x64 版本。

安裝之後,版本編號為:6.0.6002

在筆者的 NB 上安裝,包含數次的重新啟動,整體耗用時間約是 50 分鐘。

安裝完成之後,目前有遇到在執行 Windows Live Messenger (build 14.0.8064.206) 時,發生自動重新安裝的事件,猜想可能此 SP2 所更新的元件與 Windows Live Messenger 有共用的元件,才會導致這樣的問題。
筆者遇到此情形時,Windows Live Messenger 是自動執行重新安裝後就可以直接使用,版本編號仍是沒有改變,猜想僅是執行修復作業。這與璉大遇到的情形不同。


參考網址:
安裝 Windows 2008 / Vista SP2
http://tlcheng.spaces.live.com/blog/cns!145419920BFD55A7!4301.entry?wa=wsignin1.0&sa=977333592

適用於 Windows Server 2008 和 Windows Vista 的 Service Pack 2
五個語言版本的 SP2 獨立版: 提供給下列五個語言的電腦安裝:英文、法文、德文、日文和西班牙文。如果電腦安裝的是其他語言,則無法使用此選項。
http://technet.microsoft.com/zh-tw/dd262148.aspx

有關 Windows Server 2008 Service Pack 2 和 Windows Vista Service Pack 2 不可不知的事
http://technet.microsoft.com/zh-tw/dd262148.aspx

常見問題集:Windows Server 2008 Service Pack 2 和 Windows Vista Service Pack 2
http://technet.microsoft.com/zh-tw/library/dd335038.aspx

Windows Server 2008 SP2 和 Windows Vista SP2 中的顯著變更
http://technet.microsoft.com/zh-tw/library/dd335036.aspx

下載 Windows Service Pack 封鎖程式工具
http://www.microsoft.com/downloads/details.aspx?familyid=d7c9a07a-5267-4bd6-87d0-e2a72099edb7&displaylang=en