2015-04-17 67 views
1

我有一个带有名字,姓氏,城市和streetadress以及用户可以在表格中搜索的Web gui的人员表格。如何使用全文搜索在多列上进行过滤

假设表中包含4行,如:

Eva, Andersson, Stockholm, Kungsgatan 3 
Adam, Johansson, Kiruna, Malmgatan 33a 
Eva, Berquist, Kiruna, Gruvgatan 22 
Adam, Stenberg, Kiruna, Lappfogdegatan 2 

如果伊娃·安德森斯德哥尔摩,他的用户搜索/她shold只得到“伊娃,安德森,斯德哥尔摩,国王街3”一炮打响,而不是“伊娃,伯奎斯特,基律纳,格鲁夫加坦22”。但是搜索Adam Kiruna或者Eva应该返回两个点击。

眼下的过程如下:

ALTER PROCEDURE [dbo].[getPersons] 
@Search nvarchar(50) 

AS 
BEGIN 

    SET NOCOUNT ON; 
    DECLARE @SearchString varchar(100) 

    SET @SearchString = REPLACE(@Search, ' ', '*" OR "') 
    SET @SearchString = '"'[email protected]+'*"' 

    SELECT * FROM patients as p 
    WHERE CONTAINS((Firstname, LasnName, City, Streetadress), @SearchString) 
END 

但它返回一个包含任何字所以搜索“Berquist的伊娃基律纳”将返回所有四行所有行。

我该如何编写程序以获得如上所述的正确结果?

回答

0

这是我的答案,请记住,在查询服务器之前,您需要执行一些过程流程。这里

Select * from Persons_Table where first_name = Eva AND Last_name = .... 

就是这样的。

+0

问题是我现在没有多少空格分开搜索字符串包含的术语或它们的顺序。例如,它可以是“名城”或“城市姓氏名”。所以我不明白如何用简单的where子句做到这一点。如果你认为有可能以这种方式完成,请详细说明你是一个例子。 – user2858330

+0

那么,在将数据插入表格之前,您需要将其过滤掉。或者你将需要一个SQL查询中一个非常复杂的逻辑。 –

+0

数据分离在单独的列中,但搜索参数不是。那是你的意思还是你的意思是搜索参数。对它进行过滤是不可能的,例如查尔斯·林德伯格的搜查应该可以使查尔斯在林德伯格村或查尔斯林德伯格飞越大西洋海。那就是如果它们存在于数据库当然。 – user2858330

相关问题