我想根据在调用@p
存储过程时传递给我的存储过程的参数在 SQL Server 中执行一条语句。
如果@p
值为 1,[a]
则不过滤 table 中的数据,如果@p
值为 0,则根据 table[a]
上的数据过滤table 中的数据[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
但是,它使我的存储过程太长了。有另一种解决方法吗?