Disons que j'ai une instruction SQL syntaxiquement et sémantiquement correcte, donc elle s'exécute.
Dans Management Studio (ou tout autre outil de requête), comment puis-je tester les instructions SQL, et si je remarque qu'elles ont brisé quelque chose, l'annulation (dans une requête distincte?)
Le plus simple est d’envelopper votre code dans une transaction, puis d’exécuter chaque lot de code T-SQL ligne par ligne.
Par exemple,
Begin Transaction
-Do some T-SQL queries here.
Rollback transaction -- OR commit transaction
Si vous souhaitez intégrer le traitement des erreurs, vous pouvez le faire en utilisant un BLOCK TRY ... CATCH. En cas d'erreur, vous pouvez alors annuler la transformation dans le bloc catch.
Par exemple:
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
Voir le lien suivant pour plus de détails.
http://msdn.Microsoft.com/en-us/library/ms175976.aspx
J'espère que cela vous aidera, mais s'il vous plaît, laissez-moi savoir si vous avez besoin de plus de détails.
Je veux ajouter un point que vous pouvez également (et si vous devez écrire si ce que vous écrivez est complexe), ajouter une variable de test à annuler si vous êtes en mode test. Ensuite, vous pouvez exécuter le tout en une fois. Souvent, j'ajoute également du code pour afficher les résultats avant et après de diverses opérations, en particulier s'il s'agit d'un script complexe.
Exemple ci-dessous:
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