0

我的数据库中有许多具有全文目录的表。我刚刚创建了一个新的,由于某种原因,这个不起作用。

目录是这样创建的:

GO
CREATE FULLTEXT CATALOG LicenseeName_catalog AS DEFAULT;
GO

CREATE FULLTEXT INDEX ON Licensees
 ( 
  CompanyName Language 1033
 ) 
  KEY INDEX [PK_dbo.Licensees] ON LicenseeName_catalog WITH CHANGE_TRACKING AUTO
GO

我的存储过程如下所示:

CREATE PROCEDURE [dbo].[LicenseeSearch] @inputterm NVARCHAR(256), 
                                       @includeNonSearchable BIT, 
                                       @skip INT, 
                                       @take INT
AS
BEGIN
    SET NOCOUNT ON;

DECLARE @searchterm NVARCHAR(256)

SET @searchterm = '"' + @inputterm + '*"'
    SELECT * FROM 
        [dbo].[Licensees] lic
    WHERE CONTAINS(lic.*, @searchterm)
END

显然,全文内容已正确安装,因为我的其他目录按预期工作。我已经完全重建了索引。奇怪的是目录创建和存储过程在结构上或多或少相同,那么为什么不能工作呢?

除非我犯了我错过的错误。任何想法,将不胜感激。

4

1 回答 1

0
CREATE PROCEDURE [dbo].[LicenseeSearch] @inputterm NVARCHAR(256), 
                                       @includeNonSearchable BIT, 
                                       @skip INT, 
                                       @take INT
AS
BEGIN
    SET NOCOUNT ON;


DECLARE @searchterm NVARCHAR(256);
DECLARE @Sql NVARCHAR(MAX);

SET @searchterm = '"' + @inputterm + '*"'


SET @Sql=   'SELECT * FROM 
        [dbo].[Licensees] lic
    WHERE CONTAINS(lic.*,'''+ @searchterm +''')'

    EXECUTE sp_executesql @Sql
END

试试这个,因为当你将@searchterm 传递给你的查询时,它会将参数传递为“SomeValue*”,因为查询期望这样的东西“”SomeValue*”,这就是魔鬼动态 sql 的来源。

于 2013-11-02T17:21:50.427 回答