Sql server 如何编写一个t-sql主程序来捕获子程序引发的错误

Sql server 如何编写一个t-sql主程序来捕获子程序引发的错误,sql-server,tsql,stored-procedures,Sql Server,Tsql,Stored Procedures,我是T-SQL编程新手。我需要写一个主程序,里面有5个不同的子程序。如何构造程序,使子程序不会中止。相反,它们将捕获错误并在输出参数中将其报告回主程序。如果可以,请给我提供伪代码。谢谢。类似的开始事务表示连接引用的数据在逻辑上和物理上保持一致的点 提交事务使自事务开始以来执行的所有数据修改成为数据库的永久部分,释放事务所持有的资源,并将@@tracount递减为0。如果@@tracount大于1,提交事务仅将@@tracount递减1,事务保持活动状态 回滚事务删除从事务开始或保存点进行的所有数

我是T-SQL编程新手。我需要写一个主程序,里面有5个不同的子程序。如何构造程序,使子程序不会中止。相反,它们将捕获错误并在输出参数中将其报告回主程序。如果可以,请给我提供伪代码。谢谢。

类似的
开始事务
表示连接引用的数据在逻辑上和物理上保持一致的点

提交事务
使自事务开始以来执行的所有数据修改成为数据库的永久部分,释放事务所持有的资源,并将
@@tracount递减为0
。如果
@@tracount大于1
提交事务
仅将
@@tracount递减1
,事务保持活动状态

回滚事务
删除从事务开始或保存点进行的所有数据修改。它还释放事务所持有的资源

ERROR_NUMBER()返回错误的编号

ERROR\u SEVERITY()返回严重性

ERROR_STATE()返回错误状态号

ERROR_PROCEDURE()返回发生错误的存储过程或触发器的名称

ERROR_LINE()返回导致错误的例程中的行号

ERROR_MESSAGE()返回错误消息的完整文本。文本包括为任何可替换参数(如长度、对象名称或时间)提供的值

-- try block will start
        BEGIN TRY

          BEGIN TRANSACTION TranName
            EXECUTE usp_First;
        -- if sub procedure have some parameter then we can pass 
            EXECUTE usp_Second param1, param2;
            .
            .
            EXECUTE usp_Fifth;
         COMMIT TRANSACTION TranName

        END TRY
        -- if soemthing goes wrong then catch
        BEGIN CATCH 
          IF (@@TRANCOUNT > 0)
           BEGIN
              ROLLBACK TRANSACTION TranName
           END 
           -- get error detail
            SELECT
                ERROR_NUMBER() AS ErrorNumber,
                ERROR_SEVERITY() AS ErrorSeverity,
                ERROR_STATE() AS ErrorState,
                ERROR_PROCEDURE() AS ErrorProcedure,
                ERROR_LINE() AS ErrorLine,
                ERROR_MESSAGE() AS ErrorMessage
        END CATCH

有关详细信息

我是这样做的这是正确的答案,但当SP服务器是链接服务器并且我们希望在该服务器上执行SP时,则无法将引发的错误数据发送给调用它的父SP!!!我能做什么?\@BehzadKhosravifar操作问题对于链接服务器来说是正常的,我们可以使用
sp\u testlinkedserver
sp\u testlinkedserver
sp作业只是测试与服务器的连接!!!我的问题是:在链接服务器中,您无法捕获其他服务器的错误。@tinka
sp_testlinkedserver
test用于连接,与错误处理无关!您有权访问子程序吗?我是说你能编辑它们吗?您能在没有副作用的情况下更改输入和输出参数吗?