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语句,但运气不好.
在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)
| 归档时间: |
|
| 查看次数: |
1086 次 |
| 最近记录: |