假設我有一個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