問題タブ [output-clause]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql-server - SQL Server INSERT ステートメントの OUTPUT 句が ID 値を返さない
SQL Server 2008 R2 データベース サーバーで、テーブルにデータを挿入しようとしましたが、INSERT ステートメントの OUTPUT 句は、テーブルの ID 列に対してゼロのみを返します。以下の INSERT ステートメントは、多くのステートメントが 1 つのトランザクションにラップされた、より大きなスクリプトの一部です。
ここに声明があります:
これは、から選択したときに表示されるものです@NewCountryDivisions
:
テーブルの定義は次のとおりです。
INSTEAD OF
トリガーを使用して 2 つのLastUpdated...
列を更新しています。私はトリガーを書くのは初めてですが、これらが問題を引き起こすとは思いませんが、念のため、トリガーの定義は次のとおりです。
sql-server - UPDATE結果に基づいて条件付きでSQL OUTPUT句を使用する
挿入を作成する UPDATE に基づいて、条件付きで OUTPUT 句を使用できるかどうかに興味があります。
たとえば、ブール値のチェックボックスを使用すると...
...今、この部分は正常に動作します。しかし、myTable1 の行が実際に myTable1.BinCheckBox = 1 に更新された場合にのみ、OUTPUT を使用したいと考えています。
これはデータベーストリガーで動作していましたが、可能であればステートメントですべて発生させたいと思います。擬似コードのような...
UPDATE myTable 1 SET BinCheckBox = CASE WHEN BinCheckBox = '1' THEN 1 ELSE 0 END...AND IF BinCheckBox update to 1, then OUTPUT...
アドバイスありがとうございます
更新/回答
そのため、 を使用する代わりに、 と...OUTPUT
を使用して行の削除を処理しています。そのようです...INSERT INTO myTable2 SELECT
DELETE myTable2 FROM
これはうまくいくようです。
sql - 出力句 VS トリガー
私たちのデータベースでは、ほとんどのテーブルに最後の行または適用された行dbupddate
を示すフィールドがあります。datetime
INSERT
UPDATE
このフィールドに誤った値が含まれないようにするために、トリガー (場合によってAFTER
は 、場合によってはINSTEAD OF
) が存在し、最終的に値が正しく、誰かがそのフィールドに書き込もうとする「手動の」他の値ではないことを確認します。
現在、更新ステートメントを実行しています (実際MERGE
には) OUTPUT
。そのフィールドを含む句が必要です。適切な MS の記事で読んだように、OUTPUT
トリガーは無視されます。
トリガーの後にOUTPUT
値を返す回避策はありますか? dbupddate
情報を描画するために別のクエリを作成したくありません。これらのクエリの間の一瞬で、別のユーザーの 3 番目のクエリがすべてを変更したとは限らないためです。
Larnu の提案に従った結果
いくつかの意味を理解できるようにフィールドのdefault
値を変更することを除いて、提供された例を実行しました。4 つのクエリをそれぞれ実行した後、それぞれのテーブルから選択し、値を比較しました。updatetime
convert(datetime2,'1900-01-01')
updatetime
ここでの出力はトリガーを無視し、トリガーが有効になる前に挿入されたデフォルト値を返すと思いますafter
。
同じ。今、クレイジーな部分が来ます。挿入された日付と削除された日付の両方を描きました。
したがって、update
場合によっては、デフォルト値は存在しませんが、実際のテーブルとクエリの出力には異なる値があります。これらの値を同じにする方法も、更新の場合に日時で正確に何が起こるかもわかりません。