A coisa mais fácil a fazer é agrupar seu código em uma transação e, em seguida, executar cada lote de código T-SQL linha por linha.
Por exemplo,
Begin Transaction
-Do some T-SQL queries here.
Rollback transaction -- OR commit transaction
Se você deseja incorporar o tratamento de erros, pode fazê-lo usando um TRY ... CATCH BLOCK. Se ocorrer um erro, você poderá reverter a transação dentro do bloco de captura.
Por exemplo:
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
Veja o link a seguir para mais detalhes.
http://msdn.microsoft.com/en-us/library/ms175976.aspx
Espero que isso ajude, mas entre em contato se precisar de mais detalhes.
Quero acrescentar um ponto em que você também pode (e deve, se o que está escrevendo é complexo) adicionar uma variável de teste à reversão, se estiver no modo de teste. Então você pode executar a coisa toda de uma vez. Frequentemente, também adiciono código para ver os resultados anteriores e posteriores de várias operações, especialmente se for um script complexo.
Exemplo abaixo:
fonte