ホームページ >データベース >mysql チュートリアル >トリガーが存在する場合、SQL Server が OUTPUT 句を使用した UPDATE を妨げるのはなぜですか?
SQL Server Update Statement:出力節とトリガーの間の競合の解決
SQL Serverでステートメントを実行すると、UPDATE
句を使用してエラーが発生する可能性があります(「トリガーがテーブル上にあるときに出力節で更新を使用できません」)。 この制限は、OUTPUT
句がその値をキャプチャした後、トリガーがデータを変更する可能性に起因し、矛盾につながります。
OUTPUT
SQL Serverがトリガーが関与したときに最終出力値を確実に決定できないため、エラーが発生します。 トリガーは、句が完了する前にデータを変更する可能性があり、返された値が不正確になります。 これは、
句なしで句を使用する場合に特に当てはまります。
OUTPUT
OUTPUT
solutions INTO
2つの主要なソリューションは、この制限を回避します:
メソッド1:句
を採用しています
INTO
句を使用して、出力値をテーブル変数または一時テーブルにリダイレクトします。これにより、出力が潜在的なトリガー修正から分離されます:
INTO
<code class="language-sql">UPDATE BatchReports SET IsProcessed = 1 OUTPUT inserted.* INTO @t -- @t is a table variable or temporary table WHERE BatchReports.BatchReportGUID = @someGuid</code>
メソッド2:およびステートメントUPDATE
SELECT
:UPDATE
:を実行する
このメソッドは、SELECT
が。
UPDATE
重要な注意:トリガーを使用して
<code class="language-sql">SELECT BatchFileXml, ResponseFileXml, ProcessedDate INTO #tempTable -- Create a temporary table FROM BatchReports WHERE BatchReports.BatchReportGUID = @someGuid; UPDATE BatchReports SET IsProcessed = 1 WHERE BatchReports.BatchReportGUID = @someGuid; SELECT * FROM #tempTable; -- Access the desired values from the temporary table</code>
SELECT
トリガーでUPDATE
句を直接使用することは、一般的に落胆します。トリガー実行後の
以上がトリガーが存在する場合、SQL Server が OUTPUT 句を使用した UPDATE を妨げるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。