2013-05-31 13 views
13

Veri eklendikten, güncelleştirildikten veya silindikten sonra her zaman bir trigger oluşturmaya çalışıyorum. Ekleme tetikleyicisi iyi çalışıyor, ancak Güncelleştirme ve Silme ile ilgili bazı sorunlar yaşıyorum. Ekleme tetikleyicisi sonra İşte:Ekleme Sonrası, Sonradan Sonra ve SQL'de Silme Sonrası için tetikleyiciler oluşturma

CREATE TRIGGER trgAfterInsert ON [DR].[dbo].[Derived_Values] 
FOR INSERT 
AS 
    insert into [Main].[dbo].[Derived_Values_Test] 
      (BusinessUnit,Questions, Answer) 
    SELECT BusinessUnit,Questions, Answer 
    FROM inserted; 

Bu benim güncelleme için ne yaptığını ama yanlış görünüyor

CREATE TRIGGER trgAfterUpdate ON [DR].[dbo].[Derived_Values] 
FOR UPDATE 
AS 

Update [Main].[dbo].[Derived_Values_Test] 
set BusinessUnit = 'Updated Record -- After Update Trigger.'; 
GO 

Nasıl güncelleştirme oluşturmak ve tetikleyicileri silerim? Teşekkürler.

+1

sözdizimi onları oluşturmak için tam haricinde 'INSERT' tetikleyici başına gibidir UPDATE İÇİN/DELETE İÇİN "Tam olarak ne sorun yaşıyorsunuz? 'UPDATE' ve 'DELETE' tetikleyicileri ne yapmalı? –

+0

Sadece BusinessUnit güncellendiğinde güncellemek istiyorum, temelde Insert tetikleyici gibi çalışmasını istiyorum. – moe

+0

Sadece [Ana]. [Dbo] tutmaya çalışıyorsunuz [Derived_Values_Test] 'ile tam olarak [DR]. [Dbo]. [Derived_Values]'? –

cevap

11

(Güncelleme:, ben düzelttik konuda bir arıza gözardı)

(Update2: it tamir, ben kod berbat bellekten yazdı)

(Update3:) SQLFiddle daha sonra

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; 

ve kontrol edin:

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: Senkronize etmek istediğiniz takdirde) daha sonra

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; 

Ve:

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 
İlgili konular