問題タブ [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.

0 投票する
1 に答える
1204 参照

sql-server - SQL Server INSERT ステートメントの OUTPUT 句が ID 値を返さない

SQL Server 2008 R2 データベース サーバーで、テーブルにデータを挿入しようとしましたが、INSERT ステートメントの OUTPUT 句は、テーブルの ID 列に対してゼロのみを返します。以下の INSERT ステートメントは、多くのステートメントが 1 つのトランザクションにラップされた、より大きなスクリプトの一部です。

ここに声明があります:

これは、から選択したときに表示されるものです@NewCountryDivisionsここに画像の説明を入力

テーブルの定義は次のとおりです。

INSTEAD OFトリガーを使用して 2 つのLastUpdated...列を更新しています。私はトリガーを書くのは初めてですが、これらが問題を引き起こすとは思いませんが、念のため、トリガーの定義は次のとおりです。

0 投票する
0 に答える
18 参照

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 SELECTDELETE myTable2 FROM

これはうまくいくようです。

0 投票する
1 に答える
2174 参照

sql - 出力句 VS トリガー

私たちのデータベースでは、ほとんどのテーブルに最後の行または適用された行dbupddateを示すフィールドがあります。datetimeINSERTUPDATE

このフィールドに誤った値が含まれないようにするために、トリガー (場合によってAFTERは 、場合によってはINSTEAD OF) が存在し、最終的に値が正しく、誰かがそのフィールドに書き込もうとする「手動の」他の値ではないことを確認します。

現在、更新ステートメントを実行しています (実際MERGEには) OUTPUT。そのフィールドを含む句が必要です。適切な MS の記事で読んだように、OUTPUTトリガーは無視されます。

トリガーの後にOUTPUT値を返す回避策はありますか? dbupddate情報を描画するために別のクエリを作成したくありません。これらのクエリの間の一瞬で、別のユーザーの 3 番目のクエリがすべてを変更したとは限らないためです。


Larnu の提案に従った結果

いくつかの意味を理解できるようにフィールドのdefault値を変更することを除いて、提供された例を実行しました。4 つのクエリをそれぞれ実行した後、それぞれのテーブルから選択し、値を比較しました。updatetimeconvert(datetime2,'1900-01-01')updatetime

ここでの出力はトリガーを無視し、トリガーが有効になる前に挿入されたデフォルト値を返すと思いますafter

同じ。今、クレイジーな部分が来ます。挿入された日付と削除された日付の両方を描きました。

したがって、update場合によっては、デフォルト値は存在しませんが、実際のテーブルとクエリの出力には異なる値があります。これらの値を同じにする方法も、更新の場合に日時で正確に何が起こるかもわかりません。