請考慮採用某些參數的以下示例過程。存儲過程中可選參數的最佳解決方案
Create Procedure CustomerSearch(
@Name nVarChar(100) = Null,
@Phone nVarChar(100) = Null,
@Address nVarChar(100) = Null,
)
As
Select *
From dbo.CustomerView
Where (@Name is Null or Name = @Name) And
(@Phone is Null or Phone = @Phone) And
(@Address is Null or Address = @Address)
因爲參數的值可能爲空,所以我找到兩個解決方案來處理它。
- 使用或contition這樣的: (@Name爲空或名稱= @Name)
- 使用動態SQL,並添加條件進行查詢,如果參數值不爲空。
在CustomerView視圖中存在多個表連接,並且此表具有大量數據並且性能非常重要。解決方案1有開銷(執行計劃)。由於某些原因,我無法使用動態sql。有更好的方法來建立這個查詢?
當我使用條件@Name是Null或Name = @Name)而不是Name = @Name並查看執行計劃時,索引查找成本增加。
您可能會發現此資源有用:[T-SQL中的動態搜索條件](http://www.sommarskog.se/dyn-search.html)。 –