2010-07-10 78 views
1

寫完複雜的查詢或存儲過程後,如何驗證結果是否100%準確,並確保對所有輸入參數都是這樣?驗證查詢結果

我個人的方法是在開發過程中一直進行測試,測試和測試 - 檢查NULL不會出現在我不指望他們的地方,行不會丟失或加倍,然後讓通過從結果集中獲取隨機記錄完成查詢,我將執行「一定量」的測試,然後驗證這些是否符合預期。

+1

需要更多細節。這是一個非常寬泛的問題,它可以有一些明顯而不是明顯的答案。你必須對你的編程有信心,而你應該儘可能地進行編程,試圖防止每一個未來的可能情況都會使你的工作速度比將來慢下來。 – 2010-07-10 22:09:47

+0

謝謝克裏 - 你是對的 - 我應該對我的編程有信心(只要週五不是17:20就行)。 – 2010-07-10 22:13:13

回答

0

在編寫複雜查詢時,我首先總是寫出我期望的每個輸入集的預期結果。根據您的輸入繪製您的數據集並編譯結果矩陣。當您開始構建複雜查詢時,可以確保它的每一部分都基於您的初始測試矩陣生成正確的結果。

我傾向於保持我的數據集非常「簡單」,並且最小化以確保滿足每個特定的過濾/結果條件。儘管SQL本身非常複雜,但在設計和實現過程中對結果進行量化以驗證結果是令人困惑和複雜的,並且可能會在不知情的情況下導致錯誤的結果。只有我對我的樣本數據100%有信心,我才能通過對生產數據(或有效的更大數據集)的分期方案進行測試來重新驗證我的結果。

+0

我想任何有關創建或採集樣本數據的問題都應該針對另一個線索。 :)我會盡快嘗試這種方法,並且看看它是如何爲我贏得的 - 感謝瑞克。 – 2010-07-10 22:21:01

2

複雜(難以閱讀)的查詢通常可以寫成一系列簡單(易於閱讀)的針對#temp表運行的查詢。在開發過程中,我首先將一系列簡單步驟放入存儲過程中,然後將結果與最終查詢進行比較。

+2

保持簡單 - 理智的開發者格言!這聽起來與我將採取的方法大致相同 - 有時以一些I/O或CPU爲代價,現在編寫性能良好的代碼,如果需要,可以稍後優化 – 2010-07-10 22:24:17

0

先嚐試所有的子查詢。一次加入一張桌子。檢查數據庫中的約束條件,以避免在無法發生的情況下花費大量時間(約束條件是你的朋友)。如果查詢變得非常困難,可以將它的部分因素視爲視圖來創建。

想想。

極度低估,思考是。 (這可能是因爲對一位經理來說,坐在那裏的程序員的思維看起來就像坐在那裏什麼都不做的程序員一樣。)