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
Mary-Kate Olsenoriginal
2025-01-24 13:52:09192parcourir

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>

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!

Déclaration:
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