Je veux que lorsque j'exécute une requête par exemple DELETE FROM Contact
, et une erreur est soulevée au cours de la transaction, il doit supprimer les lignes qui peuvent être supprimées en levant toutes les erreurs pertinentes pour les lignes qui ne peuvent pas être supprimées.Comment conserver une transaction en cas d'échec pour certaines lignes?
Répondre
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.
Si vous utilisez MySQL vous pouvez take advantage of the DELETE IGNORE
syntax.
Alas! J'ai re-marqué ma question – Shimmy
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.
J'ai rediffusé ma question, c'est MS SQL-Server – Shimmy
- 1. Comment stripe lignes avec jQuery en excluant certaines lignes particulières
- 2. Où conserver certaines données dans l'application Windows
- 3. Powerbuilder: Rendre certaines lignes modifiables et certaines lignes non modifiables dans une fenêtre de données
- 4. Interrogation pour lignes consécutives avec certaines caractéristiques
- 5. mysql: dupliquer certaines lignes en utilisant SQL?
- 6. jqGrid - éditer uniquement certaines lignes pour une colonne modifiable
- 7. en utilisant une transaction pour éviter une course
- 8. C# /. NET comment mettre en évidence certaines lignes dans DataGridView
- 9. Comment limiter les opérations à certaines lignes?
- 10. Comment conserver une seule ligne d'une table, en supprimant les lignes en double?
- 11. Comment détecter une transaction JDO en attente?
- 12. Requête pour toutes les lignes avec created_at entre certaines heures?
- 13. Lecture de certaines lignes d'un fichier texte
- 14. transaction SQL affectant une grande quantité de lignes
- 15. Conserver l'ordre lors de l'insertion des lignes
- 16. Rejetant certaines lignes de résultat dans une jointure gauche
- 17. Conserver les nouvelles lignes dans YAML
- 18. jQuery tablesorter trier uniquement certaines lignes/colonnes
- 19. Création d'une requête pour récupérer certaines lignes dans Mysql
- 20. Comment programmer une "transaction distribuée"?
- 21. Comment conserver les données d'entrée de l'utilisateur en cas d'échec de la publication ajax Jeditable
- 22. DataGrid WPF: désactiver l'édition dans certaines lignes
- 23. Conserver le cas lors de l'utilisation de str_ireplace?
- 24. Comment obtenir certaines lignes d'un fichier texte dans C#?
- 25. Comment afficher les lignes mysql qui contiennent certaines données?
- 26. UIPickerView - Comment rendre certaines lignes non sélectionnables et grisées
- 27. Regex pour ajouter des lignes de texte supplémentaires entre certaines lignes?
- 28. Comment verrouiller certaines lignes SQL lors de l'exécution d'un processus sur celles-ci?
- 29. créer une transaction pour MS Access en C#
- 30. Comment vérifier si certaines lignes de textarea sont vides?
C'est une bien meilleure approche que de supprimer par essais et erreurs – Paddy
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
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