2013-09-08 3 views
1

У меня есть сценарий, где я разрешаю пользователю создавать отчет. Они выбирают варианты, и одним из них является «Место». Он содержит список мест, и самый первый вариант - «ВСЕ».TSQL If Statement

Когда вы выберете все, я хотел бы, чтобы он включал все, что находится в столбце местоположения.

Вот мое текущее заявление.

IF (@action = 'searchActivityLog') 
     IF (@type = 'actor') 
      BEGIN 
       SELECT actor, 
         action, 
         CONVERT (VARCHAR (20), timestamp, 100) AS timestamp, 
         [key], 
         location 
       FROM Keys_Log 
       WHERE actor = @data AND location = @location 
       ORDER BY timestamp asc 
       FOR XML PATH ('results'), TYPE, ELEMENTS, ROOT ('root'); 
      END 
     ELSE 

Есть ли способ в принципе сказать, если Location = All, то даже не включить это в предложение where?

+0

См. Мой ответ ниже. Надеюсь, это будет служить вашей цели. – sarwar026

ответ

4

Не могли бы вы просто включить

location = @location OR @location = 'All' 

В ИНЕКЕ.

Единственный другой вариант - это Dynamics SQL, но это усложняет ситуацию. См.

http://www.techrepublic.com/blog/the-enterprise-cloud/generate-dynamic-sql-statements-in-sql-server/ для примера.

+0

Местоположение никогда не будет, хотя, его фактические имена места в столбце. У меня не будет записи, в которой все называется. – SBB

+0

Вы можете передать NULL в хранимую процедуру для представления всех местоположений и использовать OR @location. IS NULL – Ryan

+0

Это все еще не имеет смысла. Мой столз называется «All, Arizona, California, Texas». Мое утверждение гласит: «Выберите * где location =« Arizona » Местоположение никогда не будет NULL или содержит слово« Все », я просто хочу включить его независимо от того, что находится в столбце, если выбрано« Все » – SBB