0

CONTAINS を使用してタイトル フィールドを検索しようとしているこの SQL クエリがあります。

しかし、私はこのエラーが発生します。

「フルテキスト インデックスが作成されていないため、列 'Title' で CONTAINS または FREETEXT 述語を使用できません。」

Titles テーブルにはインデックスが作成されており、CONTAINS は単純な検索で正常に機能します。

私が間違っていることを誰かが知っていますか?CONTAIN クエリはインライン クエリでサポートされていませんか?

このクエリは SQL Server 2008 で実行されています。

SELECT pi.PublisherGUID, pi.Publisher, pi.TitleGUID, pi.Title, 
  pi.YearsPublished, pi.FrontImage, pi.IssueGUID, pi.IssueNumber, 
  pi.IssueVariation, pi.IssueNotes, pi.CoverDate, pi.IsForSale 
  FROM (
    SELECT ROW_NUMBER() OVER(ORDER BY PublicIssues.Title,PublicIssues.IssueNumber) AS RowNum, 
      PublicIssues.PublisherGUID, PublicIssues.Publisher, 
      PublicIssues.TitleGUID, PublicIssues.Title, 
      PublicIssues.YearsPublished, PublicIssues.FrontImage, 
      PublicIssues.IssueGUID, PublicIssues.IssueNumber, 
      PublicIssues.IssueVariation, PublicIssues.IssueNotes, 
      PublicIssues.CoverDate, PublicIssues.IsForSale
      FROM (SELECT dbo.tblTitles.PublisherGUID, dbo.tblPublishers.Name AS Publisher, 
            dbo.tblTitles.TitleGUID, dbo.tblTitles.Title, 
            dbo.tblTitles.YearsPublished, dbo.tblIssues.IssueGUID, 
            dbo.tblIssues.IssueNumber, dbo.tblIssues.IssueVariation, 
            dbo.tblIssues.IssueNotes, dbo.tblIssues.CoverDate, 
            dbo.tblStockIssueImages.FrontImage, 
            ci_owner.IssueForSale(dbo.tblIssues.IssueGUID) AS IsForSale
            FROM dbo.tblStockIssueImages RIGHT OUTER JOIN
                dbo.tblIssues ON 
                dbo.tblStockIssueImages.StockIssueImageGUID = dbo.tblIssues.StockIssueImageGUID 
                LEFT OUTER JOIN
                dbo.tblTitles INNER JOIN
                dbo.tblPublishers ON dbo.tblTitles.PublisherGUID = dbo.tblPublishers.PublisherGUID 
                ON dbo.tblIssues.TitleGUID = dbo.tblTitles.TitleGUID
            ) 
    AS PublicIssues
    WHERE 1=1 AND CONTAINS(Title,@xTitle)
  ) AS pi
WHERE RowNum BETWEEN (@xPageNum - 1) * @xPageSize + 1 AND 
@xPageNum * @xPageSize ORDER BY pi.Title
4

1 に答える 1

2

実際、PublicIssuesのコンテキストでは、タイトルは全文索引付けされていません。

これは、テーブルtblTitlesで索引付けされています。

PublicIssuesを定義する式内でCONTAINS述語を移動できる可能性があると思います。次のようなもの。しかし、私は(1 = 1のヒントで)他のさまざまな基準を持つことを考えており、それらすべてを「内部」にすることは現実的ではないかもしれないと思います。[明らかに]動的SQLであるため、必要に応じて2つの場所のいずれかに検索条件を配置することでクエリを作成できる可能性があります。

  FROM (SELECT dbo.tblTitles.PublisherGUID, dbo.tblPublishers.Name AS Publisher, 
        dbo.tblTitles.TitleGUID, dbo.tblTitles.Title, 
            dbo.tblTitles.YearsPublished, dbo.tblIssues.IssueGUID, 
            dbo.tblIssues.IssueNumber, dbo.tblIssues.IssueVariation, 
            dbo.tblIssues.IssueNotes, dbo.tblIssues.CoverDate, 
        dbo.tblStockIssueImages.FrontImage, 
            ci_owner.IssueForSale(dbo.tblIssues.IssueGUID) AS IsForSale
        FROM dbo.tblStockIssueImages RIGHT OUTER JOIN
                    dbo.tblIssues ON 
                    dbo.tblStockIssueImages.StockIssueImageGUID = dbo.tblIssues.StockIssueImageGUID 
                    LEFT OUTER JOIN
                    dbo.tblTitles INNER JOIN
                    dbo.tblPublishers ON dbo.tblTitles.PublisherGUID = dbo.tblPublishers.PublisherGUID 
                    ON dbo.tblIssues.TitleGUID = dbo.tblTitles.TitleGUID

             WHERE CONTAINS(Title,@xTitle)  --- this lined moved
            ) 
AS PublicIssues
于 2009-11-22T03:49:14.247 に答える