問題タブ [triggers]
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.
database-design - ストアド プロシージャまたはトリガーなしで作業する
過去 18 か月間、複雑なデータベースとクライアント インターフェイスに取り組んできました。このアプリケーションには定期的に新しい機能が追加されており、現在では、拠点や海外を含むすべてのオフィスで、毎日数十人のユーザーに使用されています。これは、REAL データベースを備えた REAL アプリケーションであることを示すためのものです。
これまで、ストアド プロシージャを記述する必要はありませんでしたが、クライアント バージョンと更新されたデータベース モデルの間のマイナーな問題を解決するための一時的な場合を除きます (古いクライアント バージョンでは、新しく作成されたフィールドが適切に更新されず、全員が最新のデータベース モデルをインストールするまで)。バージョン)。
同様に、まだトリガーは必要ありませんでした。実際、SP とトリガーは、システムのもの、またはレプリケーション目的で追加されたものだけです。
開発者がデータベースの最適化はデータベースの正規化に反対しなければならないと考えるとき、SP とトリガーは主にデータベース設計のデフォルトを補うために使用されたり、データベース設計ルールをバイパスしようとしたりするために使用されるという奇妙な感覚があります。
問題は、これらのツールは (開発と保守の両方で) 時間がかかることです。各開発者は、データベースで維持するのに最も「費用がかかる」アイテムであることを念頭に置いて、非常に慎重に使用する必要があります。
データベースにストアド プロシージャやトリガーがまったくないかほとんどないことは、データベースの正規化レベルやコードのメンテナンス コストを示す良い指標であると考えてよいでしょうか?
編集:
トリガーと SP の両方を使用することについて公正な議論を提供した人もいます。しかし、これらのツールは、ほとんどの場合、不適切または過剰な方法で使用されていると私は考え続けています。テーブル フィールド間で複雑な更新を行うため、または合計やその他の集計データを再計算するために、いくつのトリガーが設定されていますか? 問題を報告するための一時テーブルを作成するために使用される SP の数は? これらは、開発者がこれらのツールを使用する多くの状況の 2 つであり、これは通常、データベースの設計/正規化の欠陥を示していると思います。
SP とトリガーの使用を厳密に管理する必要があることを認めている人もいます。私も必要だと思います。
私は、他のデータベースで働いているこれらすべての SQL ギークが私たちを見下し、友人たちに「ほら、彼らは SP やトリガーさえ使っていない!ハハ!」と言って、支持する議論を見つけようとしていると告白しなければなりません
mysql - INSERT が失敗する原因となる TRIGGER? 可能?
この回答をクリーンアップTRIGGER
する際に、MySQL の s とストアド プロシージャについて少し学びましたが、BEFORE INSERT
とBEFORE UPDATE
トリガーはデータを変更できますが、挿入/更新を失敗させることはできないように見えることに驚きました (つまり、検証)。この特定のケースでは、主キーの重複を引き起こすような方法でデータを操作することでこれを機能させることができました。この特定のケースでは意味がありましたが、一般的な意味では必ずしも意味がありません.
この種の機能は MySQL で可能ですか? 他の RDBMS では (残念ながら私の経験は MySQL に限定されています)? おそらくTHROW EXCEPTION
スタイル構文?
sql - SQL Server 2005 で CREATE TRIGGER に 30 分以上かかる
ライブ/本番データベースで、トリガーをテーブルに追加しようとしていますが、失敗しました。何度か試しましたが、create trigger ステートメントが完了するまでに 30 分以上かかり、キャンセルしました。
テーブルは、いくつかの異なるプロセスによって頻繁に読み書きされるテーブルです。テーブルを更新するスケジュールされたジョブを無効にし、テーブルのアクティビティが少ないときに試みましたが、テーブルにアクセスするすべてを停止することはできません。
create trigger ステートメント自体に問題があるとは思いません。create trigger ステートメントは、テスト環境で迅速に成功し、行がテーブルに挿入/更新されたときにトリガーが正しく機能しました。テスト データベースでトリガーを作成したとき、テーブルには負荷がなく、行数がかなり少なかったため、ライブ/運用データベースとは異なります (100 対 13,000,000+)。
これが私が実行しようとしている作成トリガーステートメントです
行が更新されている間、またはテーブルに多くの行がある場合に、テーブルにトリガーを作成すると問題が発生する可能性はありますか?
SQLServer では、トリガーはデフォルトで有効に作成されます。デフォルトで無効になっているトリガーを作成することはできますか?
他のアイデアはありますか?
tsql - SQL で削除をキャンセルする方法
ビジネス ルールに対して削除対象を確認し、必要に応じて削除をキャンセルするトリガーを作成したいと考えています。何か案は?
このソリューションでは、代わりに Delete トリガーを使用しました。Rollback tran が削除を停止しました。削除を行ったときにカスケードの問題が発生するのではないかと心配していましたが、発生しなかったようです。おそらく、トリガーはそれ自体をトリガーすることはできません。
wpf - ListBox 項目の DataTemplate の IsSelected の WPF トリガー
リストボックスがあり、次の ItemTemplate があります。
ご覧のとおり、ContentControl の Visibility は折りたたまれた状態に設定されています。
可視性を「可視」に設定するトリガーを定義する必要があります
ListItem が選択されているときですが、わかりません。
何か案は?
更新:もちろん、DataTemplate を単純に複製し、問題の ListBox にトリガーを追加して、どちらか一方を使用することもできますが、このコードの複製を防ぎたいと思います。
wpf - MouseOver の強調表示スタイルが 1 秒後にデフォルトに戻る (Aero が原因?)
UI の残りの部分と一致するように ComboBoxes のスタイルを設定しようとしましたが、IsMouseOver の強調表示に問題があります。指定した色で一瞬ハイライトされてから、デフォルトの色にフェードバックします。これは一種のクールな効果ですが、意図したものではありません。これが私のスタイルです:
背景色を維持するにはどうすればよいですか?
sql-server-2000 - トリガーから MS SQL Server 2000 DTS パッケージを実行する最良の方法は何ですか?
私は周りを見回して、これを行う方法についていくつかのアイデアを見つけましたが、決定的な最善の方法はありません. アイデアの 1 つは、sp_start_job を使用して、DTS パッケージを実行する SQL Server エージェント ジョブを開始することでした。これが最善の方法である場合、次の質問は、「ジョブから DTS パッケージをスケジュールして、非定期的にするにはどうすればよいですか?」ということになります。
ありがとう、ティム
sql-server - Sql Server 2005 でのトリガーの変更
SQL Server 2005 でトリガーを変更する必要があり、ストアド プロシージャではなく、テーブル アダプターと SQL ステートメントを使用して変更したいと考えています。これをクエリ ブラウザーで実行して実行できることはわかっていますが、複数のデータベースに展開し、更新でテーブル アダプターを使用する必要があります。これは可能ですか?
クエリの追加 -> 更新 -> 以下のコードの貼り付け -> クエリ ビルダーを実行して、解析されるかどうかを確認します。
エラー... USE [DataBaseName] SQL コンストラクトまたはステートメントはサポートされていません。
そして、上部を取り外して ALTER TRIGGER から始めると
ALTER TRIGGER SQL 構文またはステートメントはサポートされていません。
私はまだこれにかなり慣れていないので、これを間違った方法で行っているか、ストアド プロシージャなしでは実行できないことに驚かないでしょう。
編集:ええ、私はC#でこれをやっています。
ありがとう。ALTER TRIGGER から始めて、そのようにすることができます。これで作業が完了します。
sql-server - 複合テーブルを参照する外部キー
私はテーブル構造を持っていますが、最善の方法を作成する方法がよくわかりません。
基本的に、tblSystemItems と tblClientItems の 2 つのテーブルがあります。「アイテム」を参照する列を持つ 3 番目のテーブルがあります。問題は、この列がシステム アイテムまたはクライアント アイテムのいずれかを参照する必要があることです。どちらでもかまいません。システム アイテムには 1..2^31 の範囲のキーがあり、クライアント アイテムには -1..-2^31 の範囲のキーがあるため、衝突は発生しません。
アイテムをクエリするときはいつでも、2 つのテーブルの内容間で UNION ALL を実行するビューを使用してクエリを実行しています。
したがって、最適には、ID を一意に保ちながら、ビューは常に 2 つのテーブルの結合になるため、ビューの結果を参照する外部キーを作成したいと考えています。しかし、ビューを参照できないため、これを行うことはできません。
これで、外部キーをドロップするだけで問題ありません。ただし、参照チェックとカスケード削除/null 機能の設定が本当に必要です。トリガー以外にこれを行う方法はありますか?
oracle - ADO.NET から使用され、トリガーを伴う場合の Oracle トランザクションの範囲は?
ADO.net から Oracle を呼び出す場合、ループ内で複数の挿入を呼び出す場合、各挿入により、その PL-Sql 内に Commit ステートメントを含むトリガーが起動されるため、そのコミットを停止することは不可能であると誰かから言われました。実際にトランザクションをコミットします。
つまり、ループの開始前に ADO.Net コードでトランザクションを開始し、ループの終了時に、ループ内のすべての挿入が成功した場合にのみ、すべての挿入をコミットするようにします。私の情報筋によると、オラクルの仕組みでは、これらのトリガーに COMmit ステートメントが含まれている場合、これは不可能です..
これは非常に一般的な要件のようであり、SQL Server で可能であることはわかっているため、私には適切ではないように思えます。
これは正しいです?