web-dev-qa-db-fra.com

Existe-t-il un moyen de tester si DELETE échouera en raison de contraintes?

J'aimerais pouvoir prédire si une suppression se heurtera à une violation de la contrainte, sans effectuer réellement la suppression.

Quelles sont mes options pour faire cela? Y a-t-il un moyen simple de faire une "course sèche" d'une suppression?

10
Jay Sullivan

Si votre objectif est de traiter toutes les suppressions que si elles réussissent tous, pourquoi pas seulement utiliser Essayer/Catch:

BEGIN TRANSACTION;
BEGIN TRY
  DELETE #1;
  DELETE #2;
  DELETE #3;
  COMMIT TRANSACTION;
END TRY
BEGIN CATCH
  ROLLBACK TRANSACTION;
END CATCH

Si l'objectif est de permettre à tous les supports réussis de réussir, même si un ou plusieurs échouèrent, vous pouvez utiliser un programme d'essai/capture individuel, par ex.

BEGIN TRY
  DELETE #1;
END TRY
BEGIN CATCH
  PRINT 1;
END CATCH

BEGIN TRY
  DELETE #2;
END TRY
BEGIN CATCH
  PRINT 1;
END CATCH
24
Aaron Bertrand

Une option est de commencer une transaction, exécutez votre Supprimer, puis retournez-vous toujours:

begin tran

delete Table1 where col1 = 1

-- Test whether it is there
select * from Table1 where col1 = 1

rollback tran

-- Confirm that it is still there
select * from Table1 where col1 = 1
6
GaTechThomas