我正在使用多個可選參數的存儲過程。其中一些參數是單值,它是很容易使用WHERE子句,如:使用可選的存儲過程參數
WHERE (@parameter IS NULL OR column = @parameter)
然而,在某些情況下,WHERE條件比較複雜:
WHERE (@NewGroupId IS NULL OR si.SiteId IN (SELECT gs.SiteId
FROM [UtilityWeb].[dbo].[GroupSites] AS gs
WHERE gs.GroupId = @NewGroupId))
當我取消這些複雜在WHERE子句中,查詢執行時間加倍並且執行計劃變得非常複雜。雖然執行計劃不會影響我,但將查詢的執行時間加倍是一個明確的問題。
是否有其他人發現了,在他們的存儲過程的可選參數工作最佳實踐或模式?
這是動態SQL會是更好的解決方案嗎?
執行計劃應該會打擾你,因爲它告訴你到底查詢執行器究竟在做什麼。 – 2008-10-23 13:15:59
複雜性並沒有直接打擾我,因爲我有一些非常複雜的查詢可以快速運行。可悲的是,這並不是。 – 2008-10-23 13:47:03
另請參閱:http://stackoverflow.com/questions/532468/ignoring-a-null-parameter-in-t-sql/532510#532510 – 2009-02-12 15:06:43