我是T-SQL编程的新手。我需要编写一个包含5个不同子程序的主程序。我如何构建程序,以便子程序不会中止。相反,它们将捕获错误并在输出参数中将它们报告回主程序。如果可以,请提供伪代码。感谢。
答案 0 :(得分:2)
类似BEGIN TRANSACTION
表示连接引用的数据在逻辑上和物理上一致的点。
COMMIT TRANSACTION
使自事务开始以来执行的所有数据修改成为数据库的永久部分,释放事务持有的资源,并递减@@TRANCOUNT to 0
。如果@@TRANCOUNT is greater than 1
,COMMIT TRANSACTION
递减@@TRANCOUNT only by 1
并且交易保持有效。
ROLLBACK TRANSACTION
删除从事务开始或保存点进行的所有数据修改。它还释放了交易所持有的资源。
ERROR_NUMBER()返回错误编号。
ERROR_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
了解更多信息https://msdn.microsoft.com/en-IN/library/ms175976.aspx