我需要在子存储过程中引发一条或多条警告消息,然后将它们全部收集到父存储过程中。我试过了,
RAISERROR('Message 1',0,0) WITH NOWAIT
但它根本不起作用(ERROR_MESSAGE()
在下面的代码中为 NULL)。
我希望下面的代码类似,但它不起作用。
它不一定是RAISERROR
,任何解决方案都被接受。
create procedure test_child
as begin
RAISERROR('Message 1',0,0) WITH NOWAIT;
RAISERROR('Message 2',0,0) WITH NOWAIT;
RAISERROR('Message 3',0,0) WITH NOWAIT;
end
;
create procedure test_parent
as begin
declare @err nvarchar(max);
exec test_child;
set @err = error_message();
select @err
end
;
exec test_parent;
您将无法使用 SQL Server 中的错误处理机制来传达多个错误消息。没有“错误集合”(或其他)可以在调用代码中循环以获取每个单独的错误消息。
此外,如果未在 CATCH 块中调用 ERROR_MESSAGE() ,它将为空。从产品文档:
我建议您让 proc 将相关数据插入表中,然后调用代码现在可以检查该表。
Erland 关于在存储过程之间共享数据的文章可能会有用: https ://www.sommarskog.se/share_data.html
也许将您的警告存储在表变量中并返回可能适合您的需求?
如果可能的话,您还可以将 proc 转换为表值函数以实现相同的最终结果。