4

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

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

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

我将 ASP.NET MVC 4.0 与 SQL Server 2008 一起使用。

谢谢阿米特。

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
4

2 回答 2

23

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

将值用双引号括起来:

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

是答案

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

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

就像我搜索“amit”一样,它可以工作,但如果数据是“amit 正在工作”,它会出错。

于 2013-03-08T21:02:44.360 回答
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

于 2012-11-02T11:46:57.200 回答