Question

Je souhaite exécuter la commande UPDATE sur un groupe d'enregistrements, mais elle échoue car certains enregistrements postérieurs à la mise à jour violeraient une contrainte de table. Est-il possible de ne mettre à jour que des enregistrements appropriés?

Était-ce utile?

La solution

Comportement de la mise à jour lorsque tout ou rien est voulu par la conception

Vous pouvez ajouter des clauses Where à votre commande Update pour vérifier toutes les contraintes, mais cela entraîne une duplication de code et non une bonne chose

Pourquoi ne pas effectuer la mise à jour ligne par ligne à l'aide d'un curseur ou d'une boucle CLR?

S'il s'agit d'une application multicouche, vos objets métier doivent connaître vos contraintes SQL via des métadonnées ou une interrogation de schéma afin que la validation des données puisse être effectuée avant leur frappe dans la base de données

Le cadre CSLA contient quelques avantages pour cela

Autres conseils

L’instruction update est elle-même atomique, elle réussira ou échouera. Vous devez modifier le code SQL pour mettre à jour uniquement les lignes où la contrainte ne sera pas violée.

Vous devez ajouter les contraintes à la clause WHERE.

Soit ça ou lancez la mise à jour séparément pour chaque ligne, mais cela ne semble pas du tout une bonne idée.

Pour ajouter à certaines des réponses déjà publiées: vous devrez peut-être utiliser une sous-requête dans la clause where. J'aime (en pseudo-code)

update mytable
set myfield = myval
where not exists (select from some table that would tell you if a constraint is violated for this row)

Si vous postez du code, je pourrais peut-être vous aider davantage.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top