我有一个AzureSqlDB,它包含2个可能正在暂存和生产的数据库。我的Sp是在Staging中运行的,生产中的Sp使用 SP_EXECUTE_REMOTE 从我的临时数据库中调用Production sp。
最近我遇到了一个问题。当我打电话给我的主Sp时,我已经删除了生产数据库中的一些Sp。我无法捕获错误消息 无法找到存储过程' DBO.MY_PROD_SP'。'。
虽然我已经有了TRY CATCH BLOCK。但是因为它是Sp_Execute_REMOTE类型。我无法捕获此特定错误消息。
这是我在Stg DB中手动运行sp时得到的错误消息
消息46822,级别16,状态1,过程SP_EXECUTE_REMOTE,第1行 [Batch Start Line 16]从分片中检索数据时出错 [数据源= azure2017.database.windows.net 数据库= PRODUCTIONDB]。收到的基本错误消息是: '找不到存储过程' DBO.MY_PROD_SP'。'。
请帮我解决问题。
这是我打电话给Sp。
的方式CREATE TABLE #TEMP01(ERROR_MSG NVARCHAR(MAX),NAME NVARCHAR(MAX))
INSERT INTO #TEMP01
EXEC SP_EXECUTE_REMOTE
N'PROREMOTEREFERENCEDATA',
N' DECLARE @ERROR_MSG VARCHAR(MAX)
EXEC SP_EXECUTESQL N'' EXEC DBO.[MY_PROD_SP] @ERROR_MSG OUTPUT'',
N''@ERROR_MSG SYSNAME OUTPUT'',
@ERROR_MSG OUTPUT
SELECT @ERROR_MSG AS ERROR_MSG'
SELECT @ERROR_MSG=ERROR_MSG FROM #TEMP01
通过这种方式,我可以在输出参数的Sp帮助中找回错误消息。但是,假设Sp被丢弃了。然后错误就像无法找到商店程序。在那种情况下,我无法使用error_msg来恢复我的错误描述。因为Sp本身在Pro数据库中不可用。
那么,在这种情况下,我怎么能够检索此错误消息?
先谢谢,
Jayendran
答案 0 :(得分:0)
使用sp_executesql运行存储过程。 sp_executesql将返回无法找到的存储过程错误。
希望这有帮助。
此致
Alberto Morillo
答案 1 :(得分:0)
尝试以下内容:
EXEC sp_execute_remote N'PROREMOTEREFERENCEDATA',
N'BEGIN TRY
DECLARE @ERROR_MSG VARCHAR(MAX)
EXEC SP_EXECUTESQL N'' EXEC DBO.[MY_PROD_SP] @ERROR_MSG OUTPUT'', N''@ERROR_MSG SYSNAME OUTPUT'', @ERROR_MSG OUTPUT
SELECT @ERROR_MSG AS ERROR_MSG
END TRY
BEGIN CATCH
SELECT ERROR_MESSAGE() AS ERROR_MSG;
END CATCH'
最好,
Sumeet