gpt4 book ai didi

sql - 存储过程中可选参数的最佳解决方案

转载 作者:行者123 更新时间:2023-12-02 05:15:16 25 4
gpt4 key购买 nike

考虑以下带有一些参数的示例过程。

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)

因为参数的值可能为空,所以我找到了两个解决方案来处理它。

  1. 像这样使用或条件:(@Name 为 Null 或 Name = @Name)
  2. 使用动态sql加条件查询参数值是否不为null。

CustomerView View 中存在多个表连接,并且该表数据量大,性能非常重要。解决方案 1 有开销(执行计划)。由于某些原因我不能使用动态 sql。是否有更好的方法来构建此查询?

当我使用条件 @Name is Null or Name = @Name) 而不是 Name = @Name 并查看执行计划时,索引查找成本增加。

最佳答案

您的代码工作正常,对于您的情况,我会将参数包装在 NULLIF(@Parameter,'') 中以防止比较空白。

这也是编写查询的另一种方式。如果参数为空或 null,它会将列与自身进行比较,这始终为真。

Name = COALESCE(NULLIF(@Name,''),Name)

http://sqlfiddle.com/#!3/4ff42/1

关于sql - 存储过程中可选参数的最佳解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14757574/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com