2014-02-08 3 views
0

Я использую SP для фильтрации данных на основе местоположения и имени. Я новичок в индексировании. Я написал СП, как показано ниже, чтобы получить данные из таблицыкак оператор, использующий индекс в sql

create procedure [dbo].[Seach_University] 
(
@Search varchar(100), 
@SerLocation varchar(100) 
) 
as begin 
declare @x varchar(100) = '"'[email protected]+'*"', 
     @y varchar(100) = '"'[email protected] +'*"' 

select * from tbl_Groups where contains(Group_Name ,@x) and contains(Location,@y) 
end 

Этот код отлично работает, когда я отправляю ключевые слова. Проблема возникает, когда я отправляю только одно значение (либо @SerLocation, либо @search), данные не поступают, т. Е. Когда null идет.

может ли один помочь мне, таким образом, что даже если нулевое значение идет, он должен работать, как показано ниже код

select * from tbl_Groups where Group_Name like '%'[email protected]+'%' and Location like '%'[email protected]+'%' 
+0

Индексы обычно работают только в условиях LIKE, которые * привязано * к началу, например, 'FOO% ''. После добавления в ''% FOO' тривиального индекса нет. – user2864740

+0

, поэтому я не могу использовать индекс для этого поиска? или мне нужно ответить ниже @Nihat – Srujan0228

+0

Правильно, индекс Group_name не будет использоваться (представьте, что кто-то сказал вам найти список людей из телефонной книги, чье имя содержит «al», вы не сможете использовать алфавитный порядок - другими словами, индекс телефонной книги, вам придется сканировать все, индекс будет работать аналогичным образом). Вы можете использовать один из описанных ниже. – Nihat

ответ

0

Вот версия один запрос

select * from tbl_Groups where 
(@search is not null and @serLocation is not null and 
    contains(Group_Name ,@x) and contains(Location,@y)) or 
(@search is not null and @serLocation is null and 
    contains(Group_Name ,@x)) or 
(@search is null and @serLocation is not null and 
    contains(Location,@y)) 

Длинная версия: Вы может добавить, если заявления на ваш орган процедуры таким образом

if @search is not null and @serLocation is not null 
begin 
select * from tbl_Groups where contains(Group_Name ,@x) and contains(Location,@y) 
end 

if @search is not null and @serLocation is null 
begin 
select * from tbl_Groups where contains(Group_Name ,@x) 
end 

if @search is null and @serLocation is not null 
begin 
select * from tbl_Groups where contains(Location,@y) 
end 
+0

Спасибо за повтор, я могу сделать это, как и в случае условия, я хочу, чтобы запрос в 1 или 2 линии. – Srujan0228

Смежные вопросы