我想在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
但是,它使我的存储过程太长。还有另一种解决方法吗?
答案 0 :(得分:2)
可能最简单的方法是使用EXISTS语法:
SELECT columnlist
FROM a
WHERE @p=1 OR EXISTS (SELECT * FROM b WHERE a.col1=b.col1 AND a.col2=b.col2)
答案 1 :(得分:1)
可以使用EXISTS这样重写:
SELECT
*
FROM
a
WHERE
(@p = 1) or EXISTS(SELECT 1 FROM b where b.col1=a.col1 and b.col2=a.col2)