sql >> Databasteknik >  >> RDS >> Sqlserver

Hoppa över WHERE-satsen om variabeln för den satsen är null

För detta enkla fall i din fråga använd bara

IF ( @place IS NULL )
  SELECT *
  FROM   table1
ELSE
  SELECT *
  FROM   table1
  WHERE  country = @place  

Om din faktiska situation är mer komplex kan du använda

select * 
from Table1 
where @place is null or [email protected] 
option (recompile)

Anledningen till att du behöver recompile tipset är att undvika att ha en enda plan för båda fallen och göra en onödig skanning i händelse av att du anger ett explicit värde.

Dessa, och andra alternativ som att generera frågan dynamiskt, diskuteras i detalj i artikeln Dynamisk sökning Villkor i T-SQL



  1. Lista lagrade funktioner som refererar till en tabell i PostgreSQL

  2. Förklara oförklarligt dödläge

  3. Hur man returnerar en anpassad uppsättning i PL/SQL lagrad procedur

  4. Flera resultatuppsättningar med Oracle