sql - 处理存储过程参数中的 NULL

标签 sql sql-server tsql

我正在编写一个存储过程,它接受名为 @Vendor 的参数。我希望查询以这种方式工作,具体取决于 @Vendor 的值。

  1. IF @Vendor IS NOT NULL --> 过滤Vendorname = @Vendor

  2. IF @Vendor IS NULL --> 不要在 WHERE 子句中应用 Vendorname 过滤器

我想到的策略是应用一个 IF 分支来执行同一查询的两个版本,一个带有 Vendorname WHERE 子句过滤器,一个没有。

IF (@Vendor IS NOT NULL) {
    select *
    from table
    where Vendorname = @Vendor;
} ELSE {
    select *
    from table;
}

该语法可能略有不正确,但我相信一般方法应该有效。

但是,我的问题是是否有更简洁的方法来执行此操作,而不是再次复制相同的 SQL 语句?

最佳答案

你可以把逻辑写成:

select *
from table
where (Vendorname = @Vendor) OR (@Vendor IS NULL)

请注意:如果您在 Vendorname 上有索引,这可能不如您的版本优化。

关于sql - 处理存储过程参数中的 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47393168/

相关文章:

mysql - 为什么这个查询的 MySQL 是 "using_where"?

sql - SSIS 错误 : Unable to retrieve destination column descriptions from the parameters of the SQL command

sql-server - TSQL游标如何检查是否已经声明并因此释放

xml - 我需要有关在 T-SQL 中解析 XML 的帮助

sql - 为什么不能在 CONTAINS 语句中调用 ISNULL?

mysql - 询问!我如何获得每个用户三张 table 的总餐费和费用!这是我的第一个问题,很抱歉给您带来不便

sql - 如何使用周六作为周结束日期在 hive 中计算周结束日期?

mysql - 在 MySQL 中使用复合键更新多行

SQL-Server查询自身结果

mysql - 重新创建 MySQL 的 SQL Server View