我想在SQL Server中执行一个基于参数@p
的语句,该语句在被调用时传入我的存储过程。成对比较
如果@p
具有值1,那么从表[a]
数据没有被过滤,如果@p
具有值0,则来自表[a]
数据基于表[b]
数据进行过滤。但数据必须使用配对比较进行比较。
如果SQL Server支持两两比较,我可以通过使用此语法
SELECT
*
FROM
a
WHERE
(@p = 1) or ((a.col1, a.col2) in (SELECT col1, col2 FROM b))
但不幸的是SQL Server不支持两两比较做到这一点。
我也可以通过使用if语句来做到这一点。
if(@p=1)
begin
SELECT
*
FROM
a
end
else
begin
SELECT
*
FROM
a join b on a.col1=b.col1 and a.col2=b.col2
end
但是,它使我的存储过程太长。是否有另一种解决方法来做到这一点?