sql >> データベース >  >> RDS >> Sqlserver

SQLでの挿入後、更新後、削除後のトリガーの作成

    更新: 問題の誤りを見落としました、私は訂正しました)

    Update2: 私はメモリからコードを書き留めて、それを修復しました)

    Update3: SQLFiddle を確認してください )

    create table Derived_Values
      (
        BusinessUnit nvarchar(100) not null
        ,Questions nvarchar(100) not null
        ,Answer nvarchar(100)
        )
    
    go
    
    ALTER TABLE Derived_Values ADD CONSTRAINT PK_Derived_Values
    PRIMARY KEY CLUSTERED (BusinessUnit, Questions);
    
    create table Derived_Values_Test
      (
        BusinessUnit nvarchar(150)
        ,Questions nvarchar(100)
        ,Answer nvarchar(100)
        )
    
    go
    
    CREATE TRIGGER trgAfterUpdate ON  [Derived_Values]
    FOR UPDATE
    AS  
    begin
        declare @BusinessUnit nvarchar(50)
        set @BusinessUnit = 'Updated Record -- After Update Trigger.'
    
        insert into 
            [Derived_Values_Test]
            --(BusinessUnit,Questions, Answer) 
        SELECT 
            @BusinessUnit + i.BusinessUnit, i.Questions, i.Answer
        FROM 
            inserted i
            inner join deleted d on i.BusinessUnit = d.BusinessUnit
    end
    
    go
    
    CREATE TRIGGER trgAfterDelete ON  [Derived_Values]
    FOR UPDATE
    AS  
    begin
        declare @BusinessUnit nvarchar(50)
        set @BusinessUnit = 'Deleted Record -- After Delete Trigger.'
    
        insert into 
            [Derived_Values_Test]
            --(BusinessUnit,Questions, Answer) 
        SELECT 
            @BusinessUnit + d.BusinessUnit, d.Questions, d.Answer
        FROM 
            deleted d
    end
    
    go
    
    insert Derived_Values (BusinessUnit,Questions, Answer) values ('BU1', 'Q11', 'A11')
    insert Derived_Values (BusinessUnit,Questions, Answer) values ('BU1', 'Q12', 'A12')
    insert Derived_Values (BusinessUnit,Questions, Answer) values ('BU2', 'Q21', 'A21')
    insert Derived_Values (BusinessUnit,Questions, Answer) values ('BU2', 'Q22', 'A22')
    
    UPDATE Derived_Values SET Answer='Updated Answers A11' from Derived_Values WHERE (BusinessUnit = 'BU1') AND (Questions = 'Q11');
    UPDATE Derived_Values SET Answer='Updated Answers A12' from Derived_Values WHERE (BusinessUnit = 'BU1') AND (Questions = 'Q12');
    UPDATE Derived_Values SET Answer='Updated Answers A21' from Derived_Values WHERE (BusinessUnit = 'BU2') AND (Questions = 'Q21');
    UPDATE Derived_Values SET Answer='Updated Answers A22' from Derived_Values WHERE (BusinessUnit = 'BU2') AND (Questions = 'Q22');
    
    delete Derived_Values;
    

    そして:

    SELECT * FROM Derived_Values;
    go
    
    select * from Derived_Values_Test;
    
    
    Record Count: 0;
    
    BUSINESSUNIT    QUESTIONS   ANSWER
    Updated Record -- After Update Trigger.BU1  Q11 Updated Answers A11
    Deleted Record -- After Delete Trigger.BU1  Q11 A11
    Updated Record -- After Update Trigger.BU1  Q12 Updated Answers A12
    Deleted Record -- After Delete Trigger.BU1  Q12 A12
    Updated Record -- After Update Trigger.BU2  Q21 Updated Answers A21
    Deleted Record -- After Delete Trigger.BU2  Q21 A21
    Updated Record -- After Update Trigger.BU2  Q22 Updated Answers A22
    Deleted Record -- After Delete Trigger.BU2  Q22 A22
    

    Update4: 同期する場合: SQLFiddle

    create table Derived_Values
      (
        BusinessUnit nvarchar(100) not null
        ,Questions nvarchar(100) not null
        ,Answer nvarchar(100)
        )
    
    go
    
    ALTER TABLE Derived_Values ADD CONSTRAINT PK_Derived_Values
    PRIMARY KEY CLUSTERED (BusinessUnit, Questions);
    
    create table Derived_Values_Test
      (
        BusinessUnit nvarchar(150) not null
        ,Questions nvarchar(100) not null
        ,Answer nvarchar(100)
        )
    
    go
    
    ALTER TABLE Derived_Values_Test ADD CONSTRAINT PK_Derived_Values_Test
    PRIMARY KEY CLUSTERED (BusinessUnit, Questions);
    
    CREATE TRIGGER trgAfterInsert ON  [Derived_Values]
    FOR INSERT
    AS  
    begin
        insert
            [Derived_Values_Test]
            (BusinessUnit,Questions,Answer)
        SELECT 
            i.BusinessUnit, i.Questions, i.Answer
        FROM 
            inserted i
    end
    
    go
    
    
    CREATE TRIGGER trgAfterUpdate ON  [Derived_Values]
    FOR UPDATE
    AS  
    begin
        declare @BusinessUnit nvarchar(50)
        set @BusinessUnit = 'Updated Record -- After Update Trigger.'
    
        update
            [Derived_Values_Test]
        set
            --BusinessUnit = i.BusinessUnit
            --,Questions = i.Questions
            Answer = i.Answer
        from
            [Derived_Values]
            inner join inserted i 
        on
            [Derived_Values].BusinessUnit = i.BusinessUnit
            and
            [Derived_Values].Questions = i.Questions
    end
    
    go
    
    CREATE TRIGGER trgAfterDelete ON  [Derived_Values]
    FOR DELETE
    AS  
    begin
        delete 
            [Derived_Values_Test]
        from
            [Derived_Values_Test]
            inner join deleted d 
        on
            [Derived_Values_Test].BusinessUnit = d.BusinessUnit
            and
            [Derived_Values_Test].Questions = d.Questions
    end
    
    go
    
    insert Derived_Values (BusinessUnit,Questions, Answer) values ('BU1', 'Q11', 'A11')
    insert Derived_Values (BusinessUnit,Questions, Answer) values ('BU1', 'Q12', 'A12')
    insert Derived_Values (BusinessUnit,Questions, Answer) values ('BU2', 'Q21', 'A21')
    insert Derived_Values (BusinessUnit,Questions, Answer) values ('BU2', 'Q22', 'A22')
    
    UPDATE Derived_Values SET Answer='Updated Answers A11' from Derived_Values WHERE (BusinessUnit = 'BU1') AND (Questions = 'Q11');
    UPDATE Derived_Values SET Answer='Updated Answers A12' from Derived_Values WHERE (BusinessUnit = 'BU1') AND (Questions = 'Q12');
    UPDATE Derived_Values SET Answer='Updated Answers A21' from Derived_Values WHERE (BusinessUnit = 'BU2') AND (Questions = 'Q21');
    UPDATE Derived_Values SET Answer='Updated Answers A22' from Derived_Values WHERE (BusinessUnit = 'BU2') AND (Questions = 'Q22');
    
    --delete Derived_Values;
    

    そして:

    SELECT * FROM Derived_Values;
    go
    
    select * from Derived_Values_Test;
    
    
    BUSINESSUNIT    QUESTIONS   ANSWER
    BU1 Q11 Updated Answers A11
    BU1 Q12 Updated Answers A12
    BU2 Q21 Updated Answers A21
    BU2 Q22 Updated Answers A22
    
    BUSINESSUNIT    QUESTIONS   ANSWER
    BU1 Q11 Updated Answers A11
    BU1 Q12 Updated Answers A12
    BU2 Q21 Updated Answers A21
    BU2 Q22 Updated Answers A22
    



    1. 読み取り/書き込みモードでデータベースを開くことができません

    2. jOOQはPostgresに存在しない..に挿入します

    3. SQLSTATE [42000]:構文エラーまたはアクセス違反:1064

    4. Ubuntuでのmysqlft_min_word_lenの変更が機能しない