考虑遵循采用一些参数的示例过程。
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)
因为参数的值可能为空,我找到了两个解决方案来处理它。
- 像这样使用或使用:(@Name 为 Null 或 Name = @Name)
- 如果参数值不为空,则使用动态sql并添加条件进行查询。
CustomerView 视图中存在多个表连接,并且该表具有大量数据,性能非常重要。解决方案 1 有开销(执行计划)。由于某些原因,我不能使用动态 sql。有更好的方法来构建这个查询吗?
当我使用条件 @Name is Null 或 Name = @Name) 而不是 Name = @Name 并查看执行计划时,索引查找成本会增加。