2

このクエリを実行したい

select * from locations where region=1 or region=2

しかし、場合によっては、WHERE ( ) に 2 番目の句を含めたくない場合があります。oror region=2ステートメントを条件付きで実行する方法はありますか?

4

5 に答える 5

2

whereステートメントの条件を確認してください

select * from locations 
where region=1 
or (region=2 and @checkRegion2=1)
于 2013-09-15T19:24:40.723 に答える
0

状況によっては、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 を参照してください。

于 2013-09-15T20:28:53.740 に答える
0

動的 SQL を使用できます。

DECLARE @Query VARCHAR(MAX) = 'SELECT * FROM locations WHERE region=1 '

IF(@RUNAFTERBIT = 'TRUE')
BEGIN
    SET @Query = @Query + ' OR REGION = 2'
END

EXEC(@Query)
于 2013-09-15T19:33:57.647 に答える