切换大小写/如果在where子句中
|
我正在尝试根据一些值更改其中的PART的条件。我在这里看过类似的文章,包括:
SQL开关/案例在where子句中
但是他们并没有完全解决我的问题。
我所拥有的是一个存储过程,该过程根据其输入进行选择。这些输入是可选的(或具有默认参数,因为它们更喜欢调用它)。
所述参数中的2个是数字。
如果仅指定第一个数字,则列X必须等于该数字。
如果指定了第一个和第二个数字,则列X必须大于等于第一个,而小于等于第二个。
如果仅指定第二个数字,则为INVALID。
这就是我尝试过的(显然没有用)
DECLARE @SECOND INT;
DECLARE @FIRST INT;
SET @FIRST = 123456;
SET @SECOND = 67890;
SELECT * FROM BANK_DETAIL
WHERE -- POSSIBLY SOME OTHER WHERE CLAUSES
CASE
WHEN @SECOND IS NULL THEN
X = @FIRST
ELSE
X >= @FIRST AND X <= @SECOND
END
-- POSSIBLY SOME MORE WHERE CLAUSES
ORDER BY X
确实,这感觉需要IF / ELSE而不是CASE,但我直接针对CASE .....
哦,这是MS SQL> = 2005
没有找到相关结果
已邀请:
5 个回复
磨标烫徽啪
物崎巩
尽管这样做会更有效:
抵舵
链眷克袒姜
为null和不为null时,生成的计划必须在两种情况下均有效。使用两个单独的语句会更好:
您将“简化”成一条语句的直觉会导致您走错路。结果是更少的文本,但是由于计划欠佳而导致执行时间增加。我的回应开始时链接的文章就此主题进行了详细介绍。
甲车劲
我刚刚想到了另一种组织陈述的方式。
我还没有测试过,但是我认为这在逻辑上是等效的,并且可以为您提供更一致的查询计划。 Erland还提供了其他两种可能的方法,因此请务必阅读有关该主题的完整文章。