Maison >base de données >tutoriel mysql >Comment gérer les requêtes UPDATE avec la clause OUTPUT lorsque des déclencheurs existent ?
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.
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>
Cette approche évite l'utilisation d'une clause OUTPUT, atténuant ainsi les problèmes de compatibilité causés par les déclencheurs.
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.
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!