2011-01-19 75 views
0

我知道這個問題已被問及辯論之前。我讀過的答案大多是意見,所以我正在尋找更多技術性的東西。更多「引擎蓋下」。存儲過程與11+動態參數

我正在使用SQL Server 2008.我即將編寫一個需要接受至少11個輸入的查詢。用戶可以指定1到11(+)個。它們有各種類型(ID,文本匹配,地理,全文匹配,記錄集等)。它和SQL一樣動態。

我知道如何做到這一點,而無需使用動態SQL:

/*for simple match*/ WHERE @Input IS NOT NULL OR t.col = @Input 

這樣做,因爲加入等我從來沒有使用動態SQL缺點。但從我讀過的內容來看,這似乎是動態SQL的一種情況。

任何人都可以提供一些技術指標嗎?

+1

請參閱[動態搜索條件在T-SQL](http://www.sommarskog.se/dyn-search.html)爲相當詳盡的審查這個話題。 – 2011-01-19 20:46:53

回答

1

你需要記住,如果你不想使用動態SQL(和我也不會覺得要),那麼DRY原則就是在窗外。

有效利用TVP的和接受的事實,你將有一定程度的高複雜度(一個SQL語句)

如果你想要的一切緩存和優化搜索,你應該考慮如何將其在多個程序設計然後根據需要打破你的條件。

另一種非常常見的做法是將包括諸如條件:

WHERE (@pParam IS NULL OR ~condition~) 

如果你的參數爲NULL,則SQL不會打擾解決條件的另一半。 編輯:這最後一部分只適用於SQL2008R2,只有當使用OPTION(RECOMPILE)命令

+0

你的最後一行是完全錯誤的。這種做法使潛在的可搜索搜索謂詞不可靠,並導致不必要的表掃描。 – 2011-01-19 22:45:56