【发布时间】:2015-07-28 18:34:19
【问题描述】:
我是 T-SQL 编程的新手。我需要编写一个包含 5 个不同子程序的主程序。我如何构建程序以使子程序不会中止。相反,它们将捕获错误并在输出参数中将它们报告回主程序。如果可以的话,请给我提供伪代码。谢谢。
【问题讨论】:
标签: sql-server tsql stored-procedures
我是 T-SQL 编程的新手。我需要编写一个包含 5 个不同子程序的主程序。我如何构建程序以使子程序不会中止。相反,它们将捕获错误并在输出参数中将它们报告回主程序。如果可以的话,请给我提供伪代码。谢谢。
【问题讨论】:
标签: sql-server tsql stored-procedures
类似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
【讨论】:
sp_testlinkedserver
sp_testlinkedserver SP 作业只是测试与服务器的连接!!!我的问题是:在链接服务器中,您无法捕获其他服务器错误。
sp_testlinkedserver 测试连接并且没有任何错误处理!