ホームページ > データベース > mysql チュートリアル > トリガーが存在する場合に OUTPUT 句を使用した UPDATE クエリを処理する方法

トリガーが存在する場合に OUTPUT 句を使用した UPDATE クエリを処理する方法

Mary-Kate Olsen
リリース: 2025-01-24 13:52:09
オリジナル
145 人が閲覧しました

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

トリガーが存在する場合は OUTPUT 句を使用して更新します

OUTPUT 句を含む UPDATE クエリを実行しようとすると、エラー 334 が発生することがあります。「ステートメントに INTO 句のない OUTPUT 句が含まれている場合、ターゲット テーブルには有効なトリガーを含めることはできません。」というエラーが発生する場合があります。トリガーがターゲットテーブルに存在します。

解決策: 中間クエリを使用します

この問題を解決するには、更新を実行する前にクエリを変更して必要な値を取得します。

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

UPDATE BatchReports
SET IsProcessed = 1
WHERE BatchReports.BatchReportGUID = @someGuid</code>
ログイン後にコピー

このアプローチでは OUTPUT 句の使用が回避されるため、トリガーによって引き起こされる互換性の問題が軽減されます。

OUTPUT 句の使用を避ける: 有害な影響

トリガーで OUTPUT 句を使用すると、データが正しく取得されない可能性があります。具体的には、OUTPUT 句は、更新の完了後に値を取得するのではなく、行が変更されたときの状態に基づいて値を取得します。これにより、OUTPUT 結果に不正確なデータや古いデータが含まれる可能性があります。

回避策とその落とし穴

中間の TABLE 変数を使用してこの問題を回避する試みも無駄であることが判明しています。テーブル変数にタイムスタンプを挿入することは許可されていません。また、タイムスタンプを表すために binary(8) が使用された場合でも、更新が完了する前に値が取得されるため、戻り値は不正確になります。

以上がトリガーが存在する場合に OUTPUT 句を使用した UPDATE クエリを処理する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート