我需要经常使用TRY..CATCH
块执行存储过程。 因此,我写一个存储过程包括TRY..CATCH
块+一个输入参数:SQL Server 2012 - 将存储过程名称传递给另一个存储过程
CREATE PROCEDURE [dbo].[exec_sp_with_try_catch]
(@pnvcSPName NVARCHAR(100))
AS
DECLARE @ErrorMessage NVARCHAR(4000);
DECLARE @ErrorSeverity INT;
DECLARE @ErrorState INT;
BEGIN
BEGIN TRY
exec @pnvcSPName;
END TRY
BEGIN CATCH
SELECT @ErrorMessage = ERROR_MESSAGE(),
@ErrorSeverity = ERROR_SEVERITY(),
@ErrorState = ERROR_STATE();
RAISERROR(@ErrorMessage, -- Message text.
@ErrorSeverity, -- Severity.
@ErrorState -- State.
);
IF XACT_STATE() <> 0
ROLLBACK TRANSACTION;
END CATCH
END;
然后,我可以直接使用上述的存储过程,如果我想与try...catch
块以执行存储过程:
exec [dbo].[exec_sp_with_try_catch] @pnvcSPName = '[dbo].[another_sp]';
但是,上述方法只适用于我们不使用[dbo].[another_sp]
中的任何参数。
如果我们使用[dbo].[another_sp]
参数:
exec [dbo].[exec_sp_with_try_catch] @pnvcSPName = '[dbo].[another_sp] @para = ''K''';
它引发以下错误:
Msg 50000, Level 16, State 2, Procedure exec_sp_with_try_catch, Line 30
The name '[dbo].[another_sp] @para = 'K'' is not a valid identifier.
为什么,以及如何纠正呢?
它的工作原理。谢谢。 –