我对sql server数据库有一个复杂的问题,如果有人可以帮助我,那就太好了。
在我的sql server 2014 express中,我创建了一个包含3个表的简单数据库:
我还创建了[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的参数不能为空。
有人遇到过这个问题吗?
答案 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);