Ben*_*nWS 2 sql t-sql sql-server
我正在编写一个接受名为的参数的存储过程@Vendor.我希望查询以这种方式工作,具体取决于@Vendor.
IF @Vendor IS NOT NULL - >过滤 Vendorname = @Vendor
IF @Vendor IS NULL- >不要Vendorname在WHERE子句中应用filter
我想到的策略是应用IF分支来执行同一查询的两个版本,一个带有Vendorname WHERE子句过滤器,另一个没有.
IF (@Vendor IS NOT NULL) {
select *
from table
where Vendorname = @Vendor;
} ELSE {
select *
from table;
}
Run Code Online (Sandbox Code Playgroud)
该语法可能稍微不正确,但我相信一般方法应该有效.
但是,我的问题是,是否有更简洁的方法来执行此操作,而不是再次复制相同的SQL语句?
您可以将逻辑编写为:
select *
from table
where (Vendorname = @Vendor) OR (@Vendor IS NULL)
Run Code Online (Sandbox Code Playgroud)
一个警告:如果您有索引,这可能不如您的版本优化Vendorname.