2016-08-21 9 views
0

私は、SQL Server 2014のフルテキスト検索を実装していますが見えないのはなぜ私がこのチュートリアルhttp://www.mikesdotnetting.com/article/298/implementing-sql-server-full-text-search-in-an-asp-net-mvc-web-application-with-entity-frameworkSQL Serverがデータベース

における第四ステップでdbo.Articlesようdbo.Blocksテーブルを追加しましたそして、私は検索手順を単純化しています私の目的のために:

CREATE PROCEDURE Search 
    @SearchTerm varchar(8000), 
    @CurrentPage int = 1, 
    @PageSize int = 20 
AS 
BEGIN 
    DECLARE @NearPredicate varchar(8000), 
      @AndPredicate varchar(8000), 
      @TotalRecords int 

    SELECT 
     @NearPredicate = COALESCE(@NearPredicate + ' NEAR ', '') + items 
    FROM 
     dbo.Split(@SearchTerm, ' ') 
    LEFT JOIN 
     sys.fulltext_system_stopwords ON items = stopword 
    WHERE 
     stopword IS NULL 

    SET @AndPredicate = REPLACE(@NearPredicate, 'NEAR', 'AND') 
    SET @NearPredicate = '(' + @NearPredicate + ')' 

    SET @TotalRecords = (
     SELECT 
      COUNT(*) 
     FROM 
      AbstractBuildBlocks 
     WHERE CONTAINS(*, @AndPredicate) 
     ) 

    SELECT a.SiteId, 
      a.Content, 
      ct.Rank, 
     @TotalRecords AS TotalRecords 
    FROM 
     AbstractBuildBlocks a 
      INNER JOIN CONTAINSTABLE (Blocks, *, @NearPredicate) AS ct ON a.Id = ct.[Key] 
    ORDER BY 
     ct.RANK DESC 
    OFFSET (@CurrentPage - 1) * @PageSize ROWS FETCH NEXT @PageSize ROWS only 

END 

私は、SQL Server Management Studioでこれをテストしてみてください:新しいクエリ、印刷EXEC Search @SearchTerm="sample", @CurrentPage = 1とヒットを押して実行します!。

は二つの問題があります。

  1. 小:SQL Server Management Studioのは、私のクエリでSearchを強調し、こう述べています。

    Couldn't find stored procedure 'Search'

  2. ビッグ:クエリを実行すると、エラーがスローサーバー:

    Msg 208, Level 16, State 1, Procedure Search, Line 34
    Invalid object name 'Blocks'.

    オンライン34:

    FROM dbo.Split(@SearchTerm, ' ') /*line 34*/ 
    

私はデータベースdbo.Blocksを作成したとSplit機能に私も、この表を使用していないので、私はそれが奇妙ました。

dbo.Splitには赤色の下線が引かれていますが、メッセージはInvalid object nameですが、この手順が正常に作成されて保存されているにもかかわらず、わかりません。

そして、私はちょうどここdbo.BlocksBlocksを交換しようとしてきた最後の:

FROM 
    AbstractBuildBlocks a 
     INNER JOIN CONTAINSTABLE (Blocks, *, @NearPredicate) AS ct ON a.Id = ct.[Key] 

をして手順を再コンパイル - 今すぐエラー:

Msg 208, Level 16, State 1, Procedure Search, Line 34
Invalid object name 'dbo.Blocks'. /instead of blocks/

UPDATE私はこれを使用しました

SELECT '['+SCHEMA_NAME(schema_id)+'].['+name+']' 
AS SchemaTable 
FROM sys.tables 

結果にBlocksのテーブルはありません。そして、これはあなたがテーブルとしてBlocksオブジェクトを使用しようとしているBlocksのプロパティ enter image description here

+1

1.小さい:インテリセンスキャッシュが古くなっています - それを更新するためにCTRL-SHIFT-Rを押してください –

+0

あなたのスクリーンショットでは、 'blocks'はテーブルではありません。テーブルフォルダには何がありますか? –

答えて

1

ですが、それはあなたのフルテキストカタログの名前です。 CONTAINSTABLEdocumentationを見ると、最初のパラメータは全文索引付きの表です。その最初のパラメータはdbo.Searchであるべきですか?

+0

TreeViewの 'Blocks'と' Search'は同じデータベースにあります。適切なデータベースにいれば十分ですか? – Nikita

+0

テーブルとストアドプロシージャ名の前にスキーマ名を追加しようとしましたか? –

+0

私は 'dbo.'を追加しようとしましたが、スキーマ名(これは' dbo.'です)は役に立ちませんでした.Sql Server用のIDEを使用していた場合、ソリューション全体を再コンパイルしようとしました。コマンドは、SQL Serverの管理スタジオで? – Nikita

関連する問題