我正在编写一个存储过程,它接受名为 @Vendor
的参数。我希望查询以这种方式工作,具体取决于 @Vendor
的值。
IF @Vendor IS NOT NULL
--> 过滤Vendorname = @Vendor
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/