春天到了~俗話說「春天後母臉 — 說變就變」,那系統可以說是女人心 — 永遠都有可愛又難以捉模的時刻~ 咳咳咳…扯遠了…回到正題 ^^”。由於最近公司的 DB Server 進行升級,系統也將原本的 SQL 2000 升級至 2005,步驟在一般不過了:
安裝 => 設定 => 升級 SP2 => 完成把原本的 MDF 掛載上去後,修改連線密碼,一切正常!!上線~隔天不思議的情形就發生了…網頁上顯示的資料居然都是最舊的!! What’s up !?!?
將頁面上使用的 view 表以 SSMS 開啟,發現排序的指令沒有生效
程式內使用的 SQL String 為 “Select * from vwTest”
而 vwTest 內則有下 order by [dtDate] 的語法,恩恩~怎麼看都沒錯啊~
切到檢視表設計下看…排序以及資料都是正常的!!好…看來是檢視表內的 order 語法無法在讀取檢視表 vwTest 的第一時間生效了…馬上進行 Troble Shooting!!
在 Google 了一下之後,首先看到了微軟的 KB,裡面說到其症頭為 —
‧ The SELECT statement uses the TOP (100) PERCENT expression.
==> vwTest裡面的確有用到 TOP (100) PERCENT 的選取方式
‧ The SELECT statement uses the ORDER BY clause.
==> 也有使用 order 排序
解決方式 —
936305 Cumulative update package 2 for SQL Server 2005 Service Pack 2 is available
安裝時明明有升級到 SQL 2005 SP2 … 現象卻依然持續的發生,只好繼續找了 T_T
最後在國外的 SQL SERVER 為主題的 BLOG 中找到了一篇文章說明了因應的對策
- 在Select語法的部分,將原本的 Select TOP (100) PERCENT 改為 Select TOP 2147483647
- 有找到另外一種解法,將 Select 語法改為 Select TOP (99.999999999999)也是可行的,注意~小數點後面是 12 個 9 唷!
我採用的方法是 12 個 9 的方法,將 vwTest 的語法修改之後並儲存,在開啟的同時…一切又回到美好的正常狀態了!這裡也有一個看起來頗奇怪的地方呢,不知道各位有沒有注意到,既然都選取 TOP 100 PERCENT 了,不就是選取全部了嗎?為什麼還要特別加上以百分比選取的語法呢?後來跟程式設計師討論了一下,可能是早期的程式產生器所產生的 VIEW 特有的現象,由於程式已經是 N 年前寫的,現在已經不可考了。但為了安全…輕易的把 TOP 100 PERCENT 拿掉又怕會有更不可思議的意外,因此暫且先用 14個 9 的選取方式代替。
小插曲 — 針對 SQL 2005 SP2 的重大更新
這一個更新是在找資料中看到的,標題很有趣的寫著 “A Service Pack for a Service Pack”
這個 hotfix 修正的可是一個大問題呢…”清除工作未在排定的時間間隔執行”
什麼 O_o…排定的工作不會執行,這可是大事,當然馬上把它下載到 SERVER 進行安裝
有先發現總比到後面問題發生在處理好多了,這雖然是一個小插曲,卻是一個很大的意外收穫呢 ^^b
參考資料:
http://support.microsoft.com/kb/926292/en-us
http://support.microsoft.com/kb/933508
http://support.microsoft.com/kb/933508
http://www.themssforum.com/SQLServer/Order-views/
http://sqlblog.com/blogs/tibor_karaszi/archive/2007/11/28/sorted-views.aspx
http://www.sqlmag.com/Article/ArticleID/95449/sql_server_95449.html