SQL Server 2008中带有空格的全文搜索

时间:2012-11-02 11:00:42

标签: sql-server-2008 full-text-search

使用SQL Server 2008全文搜索搜索数据时出现问题。

当我搜索没有空格的数据时,它可以正常工作,但是当我输入带有空格的数据时,它会出错。

如果我搜索'amit'它会有效,但如果数据为'amit is working'则会出错。

我正在使用带有SQL Server 2008的ASP.NET MVC 4.0。

谢谢阿米特。

Create PROC [usp_Feedback_Search]
@Word nvarchar(500) ,   
@CompanyId UNIQUEIDENTIFIER     

As
IF ISNULL(@Word,'') = ''
 BEGIN
 Select          
  [Id] ,
[Content] ,    
[UserId],    
 [VoteCount] ,
 [IsOpen],
 [Deleted],
 [RowVersion],    
 [CreatedBy],     
 [CreatedOn],    
 [UpdatedOn],    
 [UpdatedBy],       
 [CompanyId], 
 [DisplayId],
  [Status]
 FROM Feedback         
  WHERE CompanyId=@CompanyId
  END
 ELSE
  BEGIN   

DECLARE @formatedWord varchar(500)='"'+@word+'\+"'

  Select          
  [Id] ,
[Content] ,    
[UserId],    
 [VoteCount],
 [IsOpen],
 [Deleted],
 [RowVersion],    
 [CreatedBy],     
 [CreatedOn],    
 [UpdatedOn],    
 [UpdatedBy],       
 [CompanyId], 
 [DisplayId],
  [Status]    
  FROM Feedback            
  Where CONTAINS(*,@Word)     
  and CompanyId=@CompanyId
  END
 GO

2 个答案:

答案 0 :(得分:20)

我认为阿米特的回答可能是阿米特独有的。对于其他人......

用双引号包装值:

SELECT ... WHERE Contains(tablename.columnname, '"amit is working"')

的答案
  

使用SQL Server 2008全文搜索搜索数据时出现问题。

     

当我搜索没有空格的数据时,它可以工作   但是当我输入带有空格的数据时,它会出错。

     

就像我搜索'amit'一样有效但是如果数据'amit is working'则会给出   错误。

答案 1 :(得分:7)

亲爱的,您需要忽略@,空格等外卡字符。

使用以下更新代码:

Create PROC [usp_Feedback_Search]
@Word nvarchar(500) ,   
@CompanyId UNIQUEIDENTIFIER     

As
IF ISNULL(@Word,'') = ''
 BEGIN
 Select          
  [Id] ,
[Content] ,    
[UserId],    
 [VoteCount] ,
 [IsOpen],
 [Deleted],
 [RowVersion],    
 [CreatedBy],     
 [CreatedOn],    
 [UpdatedOn],    
 [UpdatedBy],       
 [CompanyId], 
 [DisplayId],
  [Status]
 FROM Feedback         
  WHERE CompanyId=@CompanyId
  END
 ELSE
  BEGIN   

DECLARE @formatedWord varchar(500)='"'+@word+'\+"'

  Select          
  [Id] ,
[Content] ,    
[UserId],    
 [VoteCount] ,
 [IsOpen],
 [Deleted],
 [RowVersion],    
 [CreatedBy],     
 [CreatedOn],    
 [UpdatedOn],    
 [UpdatedBy],       
 [CompanyId], 
 [DisplayId],
  [Status]    
  FROM Feedback            
  Where CONTAINS(*,@formatedWord)     
  and CompanyId=@CompanyId
  END
 GO

希望这会奏效...... http://searchsqlserver.techtarget.com/tip/Using-full-text-search-for-symbols-in-SQL-Server