2016-08-21 54 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-framework爲什麼SQL Server不會看到數據庫

第4步添加dbo.Blocks表像dbo.Articles我已經簡化搜索過程我的目的:

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'.

    on line 34:

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

我覺得很奇怪,因爲我已經創建的數據庫dbo.BlocksSplit功能我甚至不使用此表。

不知道它是否重要,但dbo.Split下劃線用紅色,信息:Invalid object name,但儘管此過程已成功創建並存儲。

而最後我只是嘗試用dbo.Blocks 我更換Blocks

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的屬性 enter image description here

+1

1.小:智能感知緩存已過時 - 按CTRL-SHIFT-R刷新它 –

+0

在您的屏幕截圖中,「blocks」不是表格。表格文件夾中有什麼? –

回答

1

你試圖使用Blocks對象作爲一個表,但它是你的全文目錄的名稱。如果您查看CONTAINSTABLEdocumentation,則第一個參數是已進行全文索引的表。如果第一個參數是dbo.Search

+0

在TreeView中'Blocks'和'Search'在同一個數據庫中。在正確的數據庫中足夠嗎? – Nikita

+0

您是否嘗試在表和存儲過程名稱之前添加模式名稱? –

+0

我嘗試添加'dbo.',但它沒有幫助(模式名稱是'dbo.',對嗎?),如果我使用Sql Server的IDE,我會嘗試重新編譯整個解決方案,也許有類似的Sql Server Managment Studio中的命令? – Nikita

相關問題