在MS SQL Server Management Studio中处理事务的最佳方法
假设我有一个SQL语句,它在语法和语义上都是正确的,所以它可以执行在MS SQL Server Management Studio中处理事务的最佳方法,sql,tsql,transactions,Sql,Tsql,Transactions,假设我有一个SQL语句,它在语法和语义上都是正确的,所以它可以执行 在ManagementStudio(或任何其他查询工具)中,我如何测试SQL语句,如果我注意到它们破坏了某些东西,则回滚(在单独的查询中?最简单的方法是将代码包装到事务中,然后逐行执行每批T-SQL代码 比如说, Begin Transaction -Do some T-SQL queries here. Rollback transaction -- OR commit transaction 如果您想
在ManagementStudio(或任何其他查询工具)中,我如何测试SQL语句,如果我注意到它们破坏了某些东西,则回滚(在单独的查询中?最简单的方法是将代码包装到事务中,然后逐行执行每批T-SQL代码 比如说,
Begin Transaction
-Do some T-SQL queries here.
Rollback transaction -- OR commit transaction
如果您想合并错误处理,可以使用TRY…CATCH块。如果发生错误,您可以在catch块中回滚传输
例如:
USE AdventureWorks;
GO
BEGIN TRANSACTION;
BEGIN TRY
-- Generate a constraint violation error.
DELETE FROM Production.Product
WHERE ProductID = 980;
END TRY
BEGIN CATCH
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;
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION;
END CATCH;
IF @@TRANCOUNT > 0
COMMIT TRANSACTION;
GO
有关更多详细信息,请参阅以下链接
希望这有帮助,但如果你需要更多的细节,请让我知道 我想添加一点,如果您在测试模式下,您还可以(如果您编写的内容很复杂,那么应该)添加一个测试变量以回滚。然后你就可以一次完成整个任务。我还经常添加代码来查看各种操作的前后结果,特别是如果它是一个复杂的脚本 示例如下:
USE AdventureWorks;
GO
DECLARE @TEST INT = 1--1 is test mode, use zero when you are ready to execute
BEGIN TRANSACTION;
BEGIN TRY
IF @TEST= 1
BEGIN
SELECT *FROM Production.Product
WHERE ProductID = 980;
END
-- Generate a constraint violation error.
DELETE FROM Production.Product
WHERE ProductID = 980;
IF @TEST= 1
BEGIN
SELECT *FROM Production.Product
WHERE ProductID = 980;
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION;
END
END TRY
BEGIN CATCH
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;
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION;
END CATCH;
IF @@TRANCOUNT > 0 AND @TEST = 0
COMMIT TRANSACTION;
GO
嗨,谢谢。我第一次在这里看到了关于@TRANCOUNT的内容,您能告诉我回滚处理后“IF@@TRANCOUNT>0提交事务”会发生什么情况吗?“TRANCOUNT”有什么价值?再次感谢。在执行回滚事务后@@TRANCOUNT被设置回0。此时,提交事务将不会执行。看见