2016-10-13 17 views
0
SELECT * FROM someTable WHERE someField = 'A' 
and (EndTime > @someTime OR EndTime IS NULL) 

上記は元のクエリです。今私はEndTime IS NULLを取り除くかどうかを確認する新しい条件があります。where節の条件を条件付きで削除する方法はありますか?

SET @Throw = 1; 

IF @Throw = 1 
BEGIN 
    SELECT * FROM someTable WHERE someField = 'A' 
    and (EndTime > @someTime) 
END 
ELSE IF @Throw = 0 
BEGIN 
    SELECT * FROM someTable WHERE someField = 'A' 
    and (EndTime > @someTime OR EndTime IS NULL) 
END 

これが1つのクエリ自体で達成できるのか、それとも2つのクエリでなければならないのでしょうか?

+0

情報だけのために、なぜ '終了時間は、最初に述語OR条件としてNULL'されている場所ではありません。パフォーマンスに役立ちます。例えば、上のコードは次のようになります。 - 'someTable WHERE someField = 'A' と(EndTime IS NULL OR EndTime> @someTime)' –

答えて

2
SELECT * FROM someTable WHERE someField = 'A' 
and (EndTime > @someTime OR (@Throw = 0 AND EndTime IS NULL)) 
0
SELECT * FROM someTable WHERE someField = 'A' 
    and (EndTime > @someTime AND @Throw = 1) OR ((EndTime > @someTime OR EndTime is NULL) AND @Throw = 0)