假设我有一个SQL语句,它在语法和语义上都是正确的,因此它可以执行。在MS SQL Server Management Studio中处理事务的最佳方式
在Management Studio中(或者其他任何的查询工具)如何测试SQL语句,如果我发现他们打破了东西,回滚(在一个单独的查询?)
假设我有一个SQL语句,它在语法和语义上都是正确的,因此它可以执行。在MS SQL Server Management Studio中处理事务的最佳方式
在Management Studio中(或者其他任何的查询工具)如何测试SQL语句,如果我发现他们打破了东西,回滚(在一个单独的查询?)
做的easisest事情是包您的代码在事务中,然后逐行执行每批T-SQL代码。
例如,
Begin Transaction
-Do some T-SQL queries here.
Rollback transaction -- OR commit transaction
如果要合并的错误处理,你可以通过使用try ... catch块这样做。如果发生错误,您可以在catch块中回滚tranasction。
例如:
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
请访问以下链接了解更多详情。
http://msdn.microsoft.com/en-us/library/ms175976.aspx
希望这可以帮助,但请让我知道,如果你需要更多的细节。
我想添加一点,你也可以(如果你正在写的东西很复杂)添加一个测试变量来回滚,如果你处于测试模式。然后你可以一次执行整个事情。通常我还会添加代码以查看各种操作的前后结果,特别是如果它是复杂的脚本。下面
实施例:
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,你能告诉我在ROLLBACK处理之后发生了什么“IF @@ TRANCOUNT> 0 COMMIT TRANSACTION”吗? @@ TRANCOUNT有什么价值?再次感谢。 – QMaster 2015-06-20 21:25:36