Maison > base de données > tutoriel mysql > Comment gérer les requêtes UPDATE avec la clause OUTPUT lorsque des déclencheurs existent ?

Comment gérer les requêtes UPDATE avec la clause OUTPUT lorsque des déclencheurs existent ?

Mary-Kate Olsen
Libérer: 2025-01-24 13:52:09
original
189 Les gens l'ont consulté

How to Handle UPDATE Queries with OUTPUT Clause When Triggers Exist?

Utilisez la clause OUTPUT pour mettre à jour si le déclencheur existe

Lorsque vous essayez d'exécuter une requête UPDATE contenant une clause OUTPUT, l'erreur 334 peut se produire : "Si l'instruction contient une clause OUTPUT sans clause INTO, la table cible ne peut pas avoir de déclencheurs activés." le déclencheur existe sur la table cible.

Solution : Utiliser des requêtes intermédiaires

Pour résoudre ce problème, modifiez la requête pour récupérer la valeur requise avant d'effectuer la mise à jour :

<code class="language-sql">SELECT BatchFileXml, ResponseFileXml, ProcessedDate
FROM BatchReports
WHERE BatchReports.BatchReportGUID = @someGuid

UPDATE BatchReports
SET IsProcessed = 1
WHERE BatchReports.BatchReportGUID = @someGuid</code>
Copier après la connexion

Cette approche évite l'utilisation d'une clause OUTPUT, atténuant ainsi les problèmes de compatibilité causés par les déclencheurs.

Éviter d'utiliser la clause OUTPUT : effets néfastes

L'utilisation de la clause OUTPUT avec des déclencheurs peut entraîner une récupération de données incorrecte. Plus précisément, la clause OUTPUT récupère la valeur en fonction de l'état de la ligne au moment de sa modification, plutôt que de récupérer la valeur une fois la mise à jour terminée. Cela peut entraîner des données incorrectes ou obsolètes dans les résultats OUTPUT.

Solutions de contournement et leurs pièges

Les tentatives pour contourner ce problème en utilisant des variables TABLE intermédiaires se sont également révélées vaines. L'insertion d'horodatages dans les variables de table n'est pas autorisée, et même si binaire(8) est utilisé pour représenter l'horodatage, la valeur renvoyée sera incorrecte car la valeur est récupérée avant la fin de la mise à jour.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal