SQL Server 2014:在where条件中选择或所有值

时间:2017-01-02 08:18:39

标签: sql sql-server

以下是我想要实现的目标。我有一个过程接收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

但我正在寻找一个更好的选择,我不需要两次写几乎相同的查询。请帮忙。

2 个答案:

答案 0 :(得分:3)

我建议坚持你已经在做的事情 这是表现最明智,最安全的方式。

答案 1 :(得分:1)

试试这个

SELECT  * 
FROM    DEPARTMENTS
WHERE   (
        @args <> ''
    OR  EXISTS  (SELECT 1 FROM temp_table WHERE emp_no = empId)
)