SQL Server 2005 檢視表的不思議現象

春天到了~俗話說「春天後母臉 -- 說變就變」,那系統可以說是女人心 -- 永遠都有可愛又難以捉模的時刻~ 咳咳咳...扯遠了...回到正題 ^^"。由於最近公司的 DB Server 進行升級,系統也將原本的 SQL 2000 升級至 2005,步驟在一般不過了...


春天到了~俗話說「春天後母臉 -- 說變就變」,那系統可以說是女人心 -- 永遠都有可愛又難以捉模的時刻~ 咳咳咳...扯遠了...回到正題 ^^"。由於最近公司的 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
 

 

如果覺得這篇文章對你有所幫助,可以透過 Paypal 支持作者唷~