Параметр SQL Result if Blank Возвращает все значения - PullRequest
0 голосов
/ 09 марта 2011

У меня есть этот код, если в моих параметрах я использую как '123' и ничего для второго, тогда я получаю каждую возвращаемую строку, потому что она соответствует wilcards в address2 каждой строке, так как она пуста.Теперь, как я могу предотвратить это?

SELECT     AddressID, Address1, Address2
FROM         Address
WHERE     (Address1 LIKE '%' + @add1 + '%') OR
                      (Address2 LIKE '%' + @add2 + '%')

Спасибо

Ответы [ 4 ]

2 голосов
/ 09 марта 2011

Вы можете использовать nullif .Если параметры для nullif равны, результат будет нулевым, и like null не даст никаких попаданий.

SELECT AddressID, Address1, Address2
FROM Address
WHERE (Address1 LIKE '%' + nullif(@add1, '') + '%') OR
      (Address2 LIKE '%' + nullif(@add2, '') + '%')
1 голос
/ 09 марта 2011

Пустая строка приведет к возвращению результатов, но ноль - нет.

if ( @add2 = '' )
begin
    set @add2 = null
end

SELECT     AddressID, Address1, Address2
FROM         Address
WHERE     (Address1 LIKE '%' + @add1 + '%') OR
                      (Address2 LIKE '%' + @add2 + '%')
0 голосов
/ 09 марта 2011

Если @ add2 пусто, это будет положительное совпадение для всего в Address2.

Попробуйте это:

SELECT AddressID, Address1, Address2
FROM Address
WHERE ((@add1 <> '' and Address1 LIKE '%' + @add1 + '%') 
        OR (@add2 <> '' and Address2 LIKE '%' + @add2 + '%'))
0 голосов
/ 09 марта 2011

Вы можете использовать функцию REPLACE поверх '%' + @add2 + '%' (и для @add1, вероятно), чтобы заменить %% на '' или что-нибудь еще, что ничего не даст.:

SELECT     AddressID, Address1, Address2
FROM         Address
WHERE     (Address1 LIKE REPLACE('%' + @add1 + '%','%%', 'VoidInput')) OR
                      (Address2 LIKE REPLACE('%' + @add2 + '%','%%', 'VoidInput'))

Это будет соответствовать 'VoidInput' для пустого параметра, но в противном случае совпадать с исходным% input% string

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