消息30007,级别16 dm_fts_index_keywords,dm_fts_index_keywords_by_document,dm_fts_index_keywords_by_property

时间:2017-08-02 08:04:58

标签: sql sql-server full-text-search

我对sql server数据库有一个复杂的问题,如果有人可以帮助我,那就太好了。

在我的sql server 2014 express中,我创建了一个包含3个表的简单数据库:

  • “DocumentFile”,“DocumentSearchTerm”,“SearchTerm”和完整的搜索文本目录FTCat,包括“DocumentFile”表的3列(ExtractText,FileNameWithoutExtension,FilePath)

我还创建了[Search] Store Procedure(以及其他sql函数)来执行完整的搜索目录。 (我分享我的sql server数据库备份:https://1drv.ms/u/s!AlUHN_KmzBqksIs9ylWc5eKBvF1Tgg以便测试)

当我在我的sql server上运行时,表示以下脚本:

DECLARE @return_value int,
        @TotalRecords int

EXEC    @return_value = [dbo].[Search]
        @SearchTerm = N'c++',
        @CurrentPage = 1,
        @PageSize = 20,
        @TotalRecords = @TotalRecords OUTPUT

SELECT  @TotalRecords as N'@TotalRecords'

SELECT  'Return Value' = @return_value

它运行良好,它重新调整了两行。

现在我的问题是我订阅了一个smarterasp.net托管计划,包括一个带有完整搜索文本目录的sql server 2016数据库。

所以我恢复了托管数据库上的备份(运行成功),所有表,存储过程,函数和我的完整搜索文本目录都已成功创建。

但现在当我执行相同的脚本时:

DECLARE @return_value int,
        @TotalRecords int

EXEC    @return_value = [dbo].[Search]
        @SearchTerm = N'c++',
        @CurrentPage = 1,
        @PageSize = 20,
        @TotalRecords = @TotalRecords OUTPUT

SELECT  @TotalRecords as N'@TotalRecords'

SELECT  'Return Value' = @return_value

它因以下消息错误而失败:

Msg 30007,Level 16,State 1,Line 20 dm_fts_index_keywords,dm_fts_index_keywords_by_document,dm_fts_index_keywords_by_property和dm_fts_index_keywords_position_by_document的参数不能为空。

有人遇到过这个问题吗?

1 个答案:

答案 0 :(得分:0)

Sql server抛出一个错误,对我来说这不正常,它必须返回null。

我解释你是什么问题:

在我的存储过程[GetMainTags]中,我写了dabase硬编码的名称(我的sql server本地的旧名称):

DECLARE @db_id int = db_id(N' semanticsdb');

所以这是假的。在我的新数据库中,我必须写:

DECLARE @db_id int = db_id(N' my_new_database_name');

并且更通用我必须为执行函数的当前数据库执行此操作:

声明@dbName varchar(100); SELECT @dbName = DB_NAME(); DECLARE @db_id int = db_id(@dbName);