我有一个像这样的查询:
DECLARE @tmpValue
SET @tmpValue = 0 -- it will be change
SELECT * FROM Animal WHERE AniActive = 1
UNION
IF @tmpValue > 0
SELECT * FROM Animal WHERE.Active = 0
当我这样使用时,由于 if 条件,它会给出错误。由于我们的结构,我必须使用 UNION。
如何在 if 条件下使用它?
谢谢,
约翰
我有一个像这样的查询:
DECLARE @tmpValue
SET @tmpValue = 0 -- it will be change
SELECT * FROM Animal WHERE AniActive = 1
UNION
IF @tmpValue > 0
SELECT * FROM Animal WHERE.Active = 0
当我这样使用时,由于 if 条件,它会给出错误。由于我们的结构,我必须使用 UNION。
如何在 if 条件下使用它?
谢谢,
约翰
将条件@tmpValue > 0
移至WHERE
子句,如下所示:
SELECT * FROM Animal WHERE AniActive = 1
UNION
SELECT * FROM Animal WHERE @tmpValue > 0 AND Active = 0
将条件放入 Query 的最佳方法是 CASE 语句。您可以在查询中放置任意数量的条件。CASE 语句用于在 Query 中放置条件过滤器。
对于 EX。
DECLARE @tmpValue
SET @tmpValue = 0 -- it will be change
SELECT * FROM Animal WHERE AniActive = 1
UNION
SELECT * FROM Animal
WHERE
1 = CASE WHEN @tmpValue = 0 THEN 0 ELSE Active = 1 END
您的情况并不复杂,但对于更复杂的情况,您可以在 Query 中使用嵌套 CASE 语句。
您可以像这样将您的条件添加到查询中。如果您的测试条件为假,则联合的部分部分将不返回任何结果:
DECLARE @tmpValue
SET @tmpValue = 0 -- it will be change
SELECT * FROM Animal WHERE AniActive = 1
UNION
SELECT * FROM Animal WHERE.Active = 0 and @tmpValue > 0
这是通过完全摆脱 UNION 来简化代码的方法。在可能的情况下,我总是更喜欢更简单的解决方案。如果 select 执行表扫描,这也会执行得更好,因为它只会扫描一次而不是(可能)两次。
DECLARE @tmpValue
SET @tmpValue = 0 -- it will be change
SELECT * FROM Animal WHERE AniActive = 1 OR @tmpValue > 0