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 結果に不正確なデータや古いデータが含まれる可能性があります。
中間の TABLE 変数を使用してこの問題を回避する試みも無駄であることが判明しています。テーブル変数にタイムスタンプを挿入することは許可されていません。また、タイムスタンプを表すために binary(8) が使用された場合でも、更新が完了する前に値が取得されるため、戻り値は不正確になります。
以上がトリガーが存在する場合に OUTPUT 句を使用した UPDATE クエリを処理する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。