我试图选择并添加一个where子句,只有当某个变量为真。例如:
SELECT *
FROM STUDENTS
WHERE STUDENT_NAME IN ('John', 'Jane');
我的变量是$P{isJohnOrJane}
它可以是0或1;
我试过了
SELECT *
FROM STUDENTS
WHERE $P{isJohnOrJane} = 1
AND STUDENT_NAME IN ('John', 'Jane')
就行了。但是当${isJohnOrJane} = 0
应该选择所有的学生时,它没有选择任何东西。
我将使用正确的SQL声明变量。有两种方法可以做到这一点:在查询中直接使用变量;或者使用它来确定要执行的查询。
在SQL查询中直接使用变量的第一个示例:
DECLARE @isJohnOrJane bit = 1;
SELECT *
FROM STUDENTS
WHERE ( @isJohnOrJane = 1 AND STUDENT_NAME IN ('John', 'Jane') )
OR @isJohnOrJane = 0
或者您可以使用IF逻辑来确定执行:
IF @isJohnOrJane = 1
BEGIN SELECT * FROM STUDENTS WHERE STUDENT_NAME IN ('John', 'Jane') ) END
ELSE
BEGIN SELECT * FROM STUDENTS END
两者都会产生相同的答案,但是IF逻辑可以更好地避免包含变量的奇怪查询,它按预期在表列上使用索引,这可能更容易让其他人理解,并且可以应用于多个结果,而不是像您的示例中那样只有2个。