Пропуск инструкции WHERE, если переменная для этого оператора равна нулю - PullRequest
1 голос
/ 05 сентября 2011

У меня будет стол

TABLE1
ID  Name   Country
1   Anna   Singapore
2   Brad   UK
3   Cassie US

declare @place varchar(20);
set @place='US';

select * from Table1 where country=@place;

что если значение @place равно нулю ???

тогда выбор ничего не выберет ..

что я хочу, так это относиться к тому, что для страны не существует оператора where. в то время как есть другие операторы where, они будут работать ..

Есть идеи, как это сделать ??

Ответы [ 2 ]

3 голосов
/ 05 сентября 2011

В этом простом случае в вашем вопросе просто используйте

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

Если ваша реальная ситуация более сложна, вы можете использовать

select * 
from Table1 
where @place is null or country=@place 
option (recompile)

Причина, по которой намек recompile нуженизбегать единого плана обслуживания для обоих случаев и выполнения ненужного сканирования в случае, если вы предоставляете явное значение.

Эти и другие альтернативы, такие как динамическое создание запроса, подробно обсуждаются в статье Условия динамического поиска в T-SQL

1 голос
/ 05 января 2012

like и = эквивалентны в вашей ситуации, поскольку вы работаете с текстовыми значениями (char, nchar, varchar, nvarchar).

Вместо

WHERE  country = @place  

1008 * попробовать *

WHERE  country like @place  

Для набора переменных попробуйте Вместо

set @place='US'

Попробуйте

set @country = isnull('''US''','''%''')

Чтобы проверить это:

declare @country nvarchar(50)
set @country = isnull('''US''','''%''')
print @Country
set @country = isnull(NULL,'''%''')
print @Country

Дополнительные кавычки необходимы, потому что в вашем примере вы используете явные значения - ' является escape-символом, и вам нужно использовать одинарную кавычку вокруг каждого значения, чтобы указать, что это НЕ столбец таблицы. Если бы вы использовали COLUMN_NAME, вы бы просто использовали одинарную кавычку вокруг символа%.

В зависимости от версии SQL вам может потребоваться использовать другой символ подстановки. Это довольно прямое и линейное решение, хотя есть риски, связанные с открытыми переменными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...