Для тех, у кого есть похожая проблема или мне нужно, я выкладываю это решение, которое я создал Это может звучать так, как будто это сумасшествие, но, пожалуйста, поверьте, когда я скажу вам, что мне это нужно, а фактические SP, которые нуждаются в этом, слишком длинные для публикации.
spParentChild не изменился и остается таким же, как указано выше. spParent изменяется, как показано ниже. В результате spParent вызывает spParentChild. В его случае, если в spParentChild возникает ошибка, сообщение передается spParent в выходном параметре.
Я постараюсь ответить на любые вопросы, если они у вас возникнут. Ниже приводится spParent:
ALTER PROCEDURE [dbo].[spParent]
@isApproved varchar(max) = 'TEST',
@ApplicationDBName varchar(100) = 'SecDB',
@ApplicationInsertSPName varchar(100) = 'spParentChild',
@resultP varchar(max) output
AS
BEGIN
BEGIN TRY
SET NOCOUNT ON;
IF @resultP <> ''
BEGIN
RAISERROR('An error occurred in the parent SP.', 18, 0)
END
DECLARE @params NVarChar(max)
SET @params = '@resultCC VarChar(100) OUTPUT' -- OUTPUT Parameter for the called child SP
DECLARE @SP_Call NVarchar(MAX) -- sp_executesql requires NVarChar
SET @SP_Call = '[' + @ApplicationDBName + '].[dbo].[' + @ApplicationInsertSPName + '] ' + ' ''1'', @resultCC OUTPUT' -- ResultCC is the output parameter for the sp_executesql
EXEC sp_executesql @SP_Call, @params, @resultCC = @resultP OUTPUT -- Assign the value to the output parameter of this SP
-- EXEC spParentChild 1, @resultCC output -- THE ABOVE 5 LINES OF CODE ARE EQUAL TO THIS IS A HARDCODED CALL
if @resultP <> ''
BEGIN
SELECT @resultP [Returned Value]
END
END TRY
BEGIN CATCH
Declare @ErrMessage Varchar(max)
Declare @ErrState Varchar(max)
Declare @ErrLine Varchar(max)
select @ErrMessage=ErrorMessage, @ErrLine=ErrorLine, @ErrState=ErrorState from fnGetError()
IF @ErrMessage is not Null
BEGIN
SELECT @resultP = @ErrMessage
SELECT @ErrMessage
END
ELSE
BEGIN
SELECT @resultP = 'An unknown error occurred.'
SELECT 'bbb'
raiserror(@resultP,18,0)
END
END CATCH
END
Надеюсь, это поможет кому-то в такой нужде.