只有在传递参数具有值时才能在Where子句中使用'Exists'

Ton*_*ich 2 sql t-sql sql-server

我在存储过程中有一个像下面的选择(为简洁起见缩短).@param是存储过程的参数,可以为NULL.

SELECT name FROM Table1 WHERE EXISTS(select table from table2 Where param = @param AND ... AND ...) AND ... AND ...

我想只有在@param有值时才使用EXISTS语句(粗体部分),否则忽略它.

如果可能,我不想使用动态SQL或临时表.我试图使用CASE语句来处理EXISTS语句,但运气不好.

gbn*_*gbn 7

在WHERE子句中使用OR很可能会非常慢,特别是如果EXISTS.

其他选择......

联盟:只有一个会返回行

SELECT name FROM Table1 WHERE EXISTS (select .... from table2 Where param = @param AND ... AND ...) AND ... AND ...
UNION ALL
SELECT name FROM Table1 WHERE @param IS NULL AND ... AND ...
Run Code Online (Sandbox Code Playgroud)

条件分支:

IF @param2 IS NULL
    SELECT name FROM Table1 WHERE ... AND ...
ELSE
    SELECT name FROM Table1 WHERE EXISTS (select .... from table2 Where param = @param AND ... AND ...) AND ... AND ...
Run Code Online (Sandbox Code Playgroud)