1

我正在尝试创建一个从表中返回人名的查询。

该表包含一个名为 full_name 的字段。

我在该字段的表上创建了一个全文索引。

我有以下查询

ALTER procedure [dbo].[spGetContactFromContactName]
@contactname VARCHAR(200) 
AS
DECLARE @searchstr VARCHAR(200)
set @searchstr = '"'+REPLACE(@contactname,',','*" OR ''')+'*"'
select * from tbl_ContactDetails
where contains(Full_Name,@searchstr)

这有效,但仅在某些情况下有效。

如果该字段包含姓名John James Jones,则如果您输入以下任何内容,则该查询将起作用:

  • 约翰
  • 詹姆士
  • 琼斯
  • 约翰·詹姆斯
  • 詹姆斯·琼斯
  • 约翰·詹姆斯·琼斯

但如果您输入John Jones则不起作用。

我在网上搜索了一个解决方案,这就是上述查询的来源。任何想法或指示将不胜感激。

提前致谢

大卫

4

1 回答 1

2

尝试这个。您的原始程序没有正确处理空间。

ALTER PROCEDURE [dbo].[spGetContactFromContactName]
   @contactname VARCHAR(200)
AS 
BEGIN
   DECLARE @searchstr VARCHAR(200)
   SET @contactname = REPLACE(REPLACE(@contactname, ',', '|'), ' ', '|')
   SET @searchstr = '"' + REPLACE(@contactname, '|', '*" OR "') + '*"'
   SELECT   *
   FROM     tbl_ContactDetails
   WHERE    CONTAINS ( Full_Name, @searchstr )
END
于 2012-05-08T20:02:21.233 回答