2014-02-08 71 views
0

我正在使用SP來過濾基於位置和名稱的數據。我是新的索引部分。我寫了一個像下面這樣的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或@搜索)數據不會到來,即當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語句到您的過程體這樣的

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