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?
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
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