Blueimp 論壇首頁
  首頁  | 討論區  | 最新話題  | 搜尋  | XML  |  登入
博客來購書 | 《主管這樣帶人就對了!》
貝殼鯨魚兒童程式啟蒙(點我去報名)

此話題中所有文章數: 1 [ 話題狀態: 一般 ]
上一話題 此文章已經觀看 5567 次 而且有 0 篇回應 下一話題
會員大頭照
男寶寶 jieh 《騎士團團長》
文章: 6857
v3.8.8

發現 Reporting Service 的 bug!!!

MS SQL 教學
是不是發現你的 RS 報表跑時快時慢呢?

據我今天親手上了一個百萬雄兵的報表,發現如果是查得到的資料沒問題,但是如果是查不到的資料就要跑非常非常久!

P.S. 我測試的資料有7000多萬筆!

之前我請台柱設計了監控報表發現了交易明細類有些報表(數千萬筆資料)大部分很快,但是偶爾會慢到想砍了它!最後只好想了一個比率公式放他一條生路,表示大部份不會很慢~

進入主題......

問題出在哪呢?
以這麼一個簡單的範例
select top 10 * from col_rec where custid = @custid

col_rec 這個 Table 有七千萬筆資料,我只是要透過報表系統的參數 @custid 抓到 top 10 的資料,但是如果我亂輸入如 A 或 A123456789 這類不存在於七千多萬筆資料內的條件,Reporting Service 會跑數分鐘。
但是如果我乖乖地輸入找得到的資料,1秒看到答案!!!

怎麼可以這樣!我怎麼要求 User 一定要輸入已經存在的資料勒!

我回到 SQL Client 測試
select top 10 * from col_rec where custid = 'A'
ㄆ一ㄚ˙地就出現!!!我傻了~這不是資料庫也不是 index 的問題...
那如果是 M$ Reporting Service 的問題,小茲他又不理我,那我也不能拒絕 User 要求要查詢報表,我必須在1小時內想出破解之法,於是乎我喝了口綠茶突然靈光乍現!

既然 DB 吃條件沒問題,那我就不要讓你 RS 直接找我老闆!

declare @sql_custid varchar(10)
set @sql_custid = @custid
select top 10 * from coldata.dbo.col_rec where custid = @sql_custid

就這樣我又再次沒有辜負我媽把我生到這世上來了~ laughing

good luck
----------------------------------------
支持小惡魔
BTC : 19tn3RnCuwZVukXAwyhDWZD4uBgUZoGJPx
LTC : LTFa17pSvvoe3aU5jbmfcmEpo1xuGa9XeA
知識跟八卦一樣,越多人知道越有價值;知識最好的備份方法,散播!
藍色小惡魔(林永傑): 臉書
----------------------------------------
[編輯文章 2 次, 最後修改: jieh 於 2009/11/25 上午 02:32:44]

[2009/3/3 下午 02:36:53]   [返迴此篇文章頂端 ]  回到頂端