このクエリを実行したい
select * from locations where region=1 or region=2
しかし、場合によっては、WHERE ( ) に 2 番目の句を含めたくない場合があります。oror region=2
ステートメントを条件付きで実行する方法はありますか?
このクエリを実行したい
select * from locations where region=1 or region=2
しかし、場合によっては、WHERE ( ) に 2 番目の句を含めたくない場合があります。oror region=2
ステートメントを条件付きで実行する方法はありますか?
whereステートメントの条件を確認してください
select * from locations
where region=1
or (region=2 and @checkRegion2=1)
状況によっては、CASE
式を使用して短絡評価を実行できます。
declare @AlternateRegion as Int = 2;
select *
from Locations
where case
when Region = 1 then 1
when @AlternateRegion is not NULL then
case when Region = @AlternateRegion then 1 else 0 end
else 0
end = 1
CASE
集約関数が存在する場合、短絡評価を確実に提供することはできません。CASE / COALESCE は常にテキストの順序で評価されるとは限らない
およびAggregates Don't Follow the Semantics Of CASE
を参照してください。
動的 SQL を使用できます。
DECLARE @Query VARCHAR(MAX) = 'SELECT * FROM locations WHERE region=1 '
IF(@RUNAFTERBIT = 'TRUE')
BEGIN
SET @Query = @Query + ' OR REGION = 2'
END
EXEC(@Query)