web-dev-qa-db-ja.com

INSERT / UPDATE / DELETEトリガーを作成する方法

トリガーに関する私の知識は非常に貧弱です。

列名(A1,A2,A3,A4,A5,A6)を使用してtableAにINSERT/UPDATE/DELETEトリガーを作成したい。トリガーが起動した後、少なくとも2つの異なる列名(B1, B2, A3, A4, A5, A6)を使用して、そのデータをtableBに配置します。

基本的にtableAに変更がある場合、その変更はそれぞれの列のtableB、つまりA1-> B1、A2-> B2、A3-> A3のようになります。

誰かが可能であればこれを手伝ってくれませんか?

1
user162139

以下は、INSERTトリガーを作成する方法のスニペットです。 UPDATEは非常によく似ており、DELETEはその処理方法に依存します。すべてのトリガーについて詳しく理解するには、create tableステートメントが必要です。

トリガーは、T-SQLであり、多少のロジックは多かれ少なかれ結び付けられています。では、AからBにデータを取得して名前を変更するにはどうすればよいでしょうか。以下に例を示します。

CREATE TABLE TableA (A1 INT
                   , A2 INT
                   , A3 INT
                   , A4 INT
                   , A5 INT
                   , A6 INT);

CREATE TABLE TableB (B1 INT
                   , B2 INT
                   , A3 INT
                   , A4 INT
                   , A5 INT
                   , A6 INT);
GO

CREATE TRIGGER TriggerTest
ON TableA
AFTER INSERT
AS
BEGIN
    INSERT INTO TableB (B1
                      , B2
                      , A3
                      , A4
                      , A5
                      , A6)
    SELECT i.A1
         , i.A2
         , i.A3
         , i.A4
         , i.A5
         , i.A6
    FROM   inserted i;
END;
GO

INSERTしたい列とSELECT句を一致させています。SQLは、INSERTとSELECTの順序と宣言のために、A1がB1に入ると認識しています。必要に応じて、後でエイリアスを使用することもできます。以下の例をご覧ください。

SELECT 1 AS 'FakeNumber';

SELECT 1 AS 'NewColumnName';

また、トリガーは役立つだけでなく非常に危険な場合もあります。注意して使用してください。 QAとテストを使用して開発をリンガーに通し、慎重に本番環境に伝播します。そしていつものように、仕事に最適なツールを使用していることを評価してください。すべての問題が釘であるとは限らず、すべての解決策がハンマーであるとは限りません。

1
Shaulinator