2010-01-15 8 views

Répondre

2

Pour SQL Server, vous n'allez pas casser l'atomicité de la commande Delete dans une instruction unique - même émise en dehors d'une transaction explicite, vous allez agir de manière implicite - par ex. tout ou rien comme tu as vu. Dans les domaines d'une transaction explicite, une erreur annulera par défaut la totalité de la transaction, mais cela peut être modifié pour simplement annuler l'instruction unique qui a été erronée dans la transaction globale (de plusieurs instructions). est SET XACT_ABORT.

Étant donné que votre suppression est une instruction unique, XACT_ABORT ne peut pas vous aider - la ligne sera erronée et la suppression sera annulée.

Si vous connaissez la condition d'erreur que vous allez faire face (comme une violation FK contrainte, vous pouvez vous assurer de supprimer a un approprié où la clause de ne pas tenter de supprimer des lignes que vous savez générer une erreur.

+0

C'est une bien meilleure approche que de supprimer par essais et erreurs – Paddy

+0

Je sais ce qu'est l'erreur, je veux juste utiliser l'erreur au lieu d'un WHERE, c.-à-d. supprimer toutes les lignes qui peuvent être supprimées – Shimmy

+0

Vous ne serez pas en mesure de SQL Server sans passer par des cerceaux (exécuter une suppression de lot de boucle et faire la taille de lot 1 - et utiliser Set XACT etc e cerceaux, et vous savez la clause where dont vous avez besoin, je voudrais juste l'utiliser. – Andrew

0

Ceci est une fonctionnalité qui dépend entièrement de la saveur de la base de données que vous utilisez. Certains l'auront et d'autres non. Par exemple, Oracle nous offre la possibilité de consigner les erreurs DML en masse. The example in the documentation uses an INSERT statement mais le même principe s'applique à toute instruction DML.

+0

J'ai rediffusé ma question, c'est MS SQL-Server – Shimmy

Questions connexes