我需要爲搜索頁面編寫一個存儲過程。搜索頁面允許用戶爲某些過濾器選擇「任何」,每個過濾器映射到我的數據庫中的一列。SQL服務器中的條件過濾
什麼是我的存儲過程接近這一目標的最佳方式:
(1)我應該去使用動態SQL(sp_executesql的),並構建基於過濾器選擇的查詢?這會對緩存執行計劃產生任何負面影響嗎?
(2)我應該將「Any」翻譯爲所有可能的值並在靜態查詢中使用它們嗎? (3)我應該使用強制過濾器將結果存儲在臨時表中,然後在這些結果上逐一應用可選過濾器(支持ANY選項)?
(4)我沒有想過的其他方法?
不是一個完整的答案,所以我會發表評論,但做**不做** 2' - 查詢引擎仍然會檢查該字段,當它不需要(即如果您指定一個列表對於IN列表中所有值的表,它仍然會檢查每一行) – JNK
關於此主題的必讀內容; http://www.sommarskog.se/dyn-search.html –