在WHERE子句中添加IF条件,仅在特定场合添加“AND”。在其他场合跳过'AND'部分

时间:2015-07-23 19:35:49

标签: sql-server sql-server-2008

我正在尝试锻炼这样的东西。这是一个示例代码,因为我无法提出整个存储过程。

我从表中获取值,同时将@children作为SP的参数。仅当AND中的值大于1时,我才想运行@children条件。是否可以在SQL Server 2008中的IF子句中添加WHERE条件?我怎样才能实现以下目标?从逻辑上讲,下面是我想要实现的情况。如果您有任何疑问,请告诉我们,以便我提供更多信息。

Select empId, empDesignation, empSalary, hasChildren from Employee Where empDesignation = 'Manager'

IF (@children > 2 )
{
AND hasChildren = 1
}

2 个答案:

答案 0 :(得分:3)

您可以将合并查询与$document[0].body.scrollTopAND运算符结合使用:

OR

在这种情况下,如果Select empId, empDesignation, empSalary, hasChildren from Employee Where empDesignation = 'Manager' AND (@children < 2 OR hasChildren = 1) 为1或更低,则只有条件@children有效,因此永远不会评估条件@children < 2

另一方面,hasChildren = 1大于1,则条件@children无效,在这种情况下,条件@children < 2将被评估。

答案 1 :(得分:0)

使用CASE可以这样工作:

SELECT 
    empId, 
    empDesignation, 
    empSalary, 
    hasChildren 
FROM Employee 
WHERE 
    empDesignation = 'Manager'
    AND (
        CASE
            WHEN @children <= 2 THEN 1
            WHEN @children > 2 AND hasChildren = 1 THEN 1
            ELSE 0 
        END 
        ) = 1

或者,你可以这样做:

IF @children > 2
    BEGIN
        SELECT 
            empId, 
            empDesignation, 
            empSalary, 
            hasChildren 
        FROM Employee 
        WHERE 
            empDesignation = 'Manager'
            AND hasChildren = 1
    END
ELSE
    BEGIN
        SELECT 
            empId, 
            empDesignation, 
            empSalary, 
            hasChildren 
        FROM Employee 
        WHERE 
            empDesignation = 'Manager'
    END