2013-05-31 7 views
13

में अद्यतन के बाद और बाद में हटाए जाने के बाद ट्रिगर्स बनाना, डेटा डालने, अद्यतन या हटाए जाने के बाद मैं प्रत्येक बार trigger बनाने की कोशिश कर रहा हूं। डालने के लिए ट्रिगर ठीक काम कर रहा है लेकिन मुझे अपडेट और डिलीट के साथ कुछ समस्याएं आ रही हैं। यहाँ ट्रिगर सम्मिलित करने के बाद है:एसक्यूएल

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; 

यह है कि मैं क्या अद्यतन के लिए किया है, लेकिन यह गलत लगता है,

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 

मैं अद्यतन कैसे बना सकता हूँ और ट्रिगर हटा सकता हूँ? धन्यवाद।

+1

वाक्य रचना उन्हें बनाने के लिए वास्तव में छोड़कर के रूप में प्रति 'INSERT' ट्रिगर है 'अपडेट के लिए'/'DELETE के लिए 'आपको क्या सटीक समस्या है? 'अद्यतन' और 'हटाएं' ट्रिगर्स क्या करना चाहते हैं? –

+0

जब मैं BusinessUnit को अद्यतन करता हूं, तो मैं बस इसे अपडेट करना चाहता हूं, मूल रूप से मैं इसे ट्रिगर जैसे ही काम करना चाहता हूं। – moe

+0

क्या आप बस '[मुख्य]। [डीबीओ] रखने की कोशिश कर रहे हैं। [Derived_Values_Test] '' [DR]। [Dbo] के साथ बिल्कुल सिंक्रनाइज़ किया गया। [Derived_Values] '? –

उत्तर

11

(अद्यतन: बात है, मैं सही है में एक गलती की अनदेखी)

(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