以下是我想要实现的目标。我有一个过程接收employeeIds作为可选参数并将它们存储到临时表(temp_table)中,如下所示
empId
-------
3432
3255
5235
2434
现在我需要在2个条件下运行以下查询:
第一个条件:如果参数非空,那么我的查询应为 -
SELECT *
FROM DEPARTMENTS
INNER JOIN temp_table ON emp_no = empId
第二个条件:如果参数为空,则会显示部门表中的所有行
SELECT *
FROM DEPARTMENTS
我可以使用的一个选项是:
IF (@args <> '')
BEGIN
SELECT *
FROM DEPARTMENTS
INNER JOIN temp_table ON emp_no = empId
END
ELSE
BEGIN
SELECT *
FROM DEPARTMENTS
END
但我正在寻找一个更好的选择,我不需要两次写几乎相同的查询。请帮忙。
答案 0 :(得分:3)
我建议坚持你已经在做的事情 这是表现最明智,最安全的方式。
答案 1 :(得分:1)
试试这个
SELECT *
FROM DEPARTMENTS
WHERE (
@args <> ''
OR EXISTS (SELECT 1 FROM temp_table WHERE emp_no = empId)
)