いくつかのパラメーターを使用する次のサンプル プロシージャを検討してください。
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)
パラメータの値がnullになる可能性があるため、それを処理するための2つの解決策を見つけました。
- 次のように使用または条件付けします: (@Name is Null or Name = @Name)
- 動的 SQL を使用し、パラメーター値が null でない場合にクエリに条件を追加します。
CustomerView ビューには複数のテーブル結合が存在し、このテーブルには大量のデータが含まれており、パフォーマンスが非常に重要です。ソリューション 1 にはオーバーヘッドがあります (実行計画)。何らかの理由で、動的 sql を使用できません。このクエリを作成するより良い方法はありますか?
Name = @Name の代わりに条件 @Name is Null または Name = @Name) を使用して実行プランを表示すると、インデックスのシーク コストが増加します。