我的数据库中有许多具有全文目录的表。我刚刚创建了一个新的,但由于某种原因,这个没有用。
目录的创建方式如下:
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
显然,正如我的其他目录按预期工作一样,正确安装了全文。我已经完成了索引的完全重建。奇怪的是目录创建和sprocs在结构方面或多或少相同,所以为什么一个不起作用?
除非我犯了错误,否则我错过了。任何想法都将不胜感激。
答案 0 :(得分: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的用武之地。