sql >> Database teknologi >  >> RDS >> Sqlserver

oprettelse af triggere for After Insert, After Update og After Delete i SQL

(Opdatering: overset en fejl i sagen, har jeg rettet)

(Opdatering 2: Jeg skrev fra hukommelsen, at koden var ødelagt, reparerede den)

(Opdatering 3: tjek SQLFiddle )

opret tabel Derived_Values ​​( BusinessUnit nvarchar(100) ikke null ,Spørgsmål nvarchar(100) ikke null ,Answer nvarchar(100) )goALTER TABLE Afledte_Values ​​ADD CONSTRAINT PK_Derived_ValuesPRITED (Queyness CLUESTValuesPRIS_Tabel_KEYValuesPRIS_Values_Values; BusinessUnit nvarchar(150) ,Spørgsmål nvarchar(100) ,Svar nvarchar(100) )goCREATE TRIGGER trgAfterUpdate PÅ [Afledte_Værdier]FOR OPDATERINGER start erklære @BusinessUnit nvarchar(50) ='After UpdatedUnit. indsæt i [Derived_Values_Test] --(BusinessUnit,Spørgsmål, Answer) SELECT @BusinessUnit + i.BusinessUnit, i.Questions, i.Answer FROM inserted i indre joinforbindelse slettet d på i.BusinessUnit =d.BusinessUnitendgoCREATE TRIGONDerivede] FOR UPDATEAS start erklære @BusinessUnit nvarchar(50) set @BusinessUnit ='Slettet post -- Efter sletning af trigger.' indsæt i [Derived_Values_Test] --(BusinessUnit,Questions, Answer) SELECT @BusinessUnit + d.BusinessUnit, d.Questions, d.Answer FROM slettede dendgoinsert Afledte_Values ​​(BusinessUnit,Questions, Answer'), 'Q1BU1', 'Q111', 'A11')indsæt Afledte_Værdier (BusinessUnit,Spørgsmål, Answer) værdier ('BU1', 'Q12', 'A12')indsæt Afledte_Values ​​(BusinessUnit,Questions, Answer) værdier ('BU2', 'Q21', 'A21') indsæt Derived_Values ​​(BusinessUnit,Questions, Answer) værdier ('BU2', 'Q22', 'A22')OPDATERING Afledte_Values ​​SET Answer='Opdaterede svar A11' fra Derived_Values ​​WHERE (BusinessUnit ='AND (BU1') );UPDATE Derived_Values ​​SET Answer='Opdateret svar A12' fra Derived_Values ​​WHERE (BusinessUnit ='BU1') AND (Spørgsmål ='Q12');OPDATERET Afledte_Values ​​SET Answer='Opdateret svar A21' fra WH_Values2Business2' (Spørgsmål ='Q12'); ) AND (Spørgsmål ='Q21');OPDATERING Afledte_Værdier SET Answer='Opdaterede svar A22' fra Afledte_Værdier WHERE (BusinessUnit ='BU2') OG (Spørgsmål ='Q22');slet afledte_værdier; 

og derefter:

SELECT * FROM Derived_Values;goselect * from Derived_Values_Test;Record Count:0;BUSINESSUNIT SPØRGSMÅL ANSWERUpdated Record -- After Update Trigger.BU1 Q11 Opdaterede Answers A11Deleted Record -- After Delete Trigger A11Updated Record. Opdater Trigger.BU1 Q12 Opdateret Answers A12Deleted Record -- Efter sletning Trigger.BU1 Q12 A12Updated Record -- Efter Update Trigger.BU2 Q21 Opdateret Answers A21Deleted Record -- Efter Delete Trigger.BU2 Q21 A21Updated Record -- Efter Update Trigger.BU2 Q22 Updated Svar A22Slettet post -- Efter sletning af trigger.BU2 Q22 A22 

(Opdatering 4: Hvis du vil synkronisere:SQLFiddle )

opret tabel Derived_Values ​​( BusinessUnit nvarchar(100) ikke null ,Spørgsmål nvarchar(100) ikke null ,Answer nvarchar(100) )goALTER TABLE Afledte_Values ​​ADD CONSTRAINT PK_Derived_ValuesPRITED (Queyness CLUESTValuesPRIS_Tabel_KEYValuesPRIS_Values_Values; BusinessUnit Nvarchar (150) ikke null, spørgsmål nvarchar (100) ikke null, svar nvarchar (100)) målbord afledt_values_test Tilføj begrænsning pk_derived_values_testPrimary Key Clustered (BusinessUnit, spørgsmål); Opret trigger trgafterInterSt på [Derived_Values] for indsatsen (BusinessUnit,Questions,Answer) SELECT i.BusinessUnit, i.Questions, i.Answer FROM indsat iendgoCREATE TRIGGER trgAfterUpdate ON [Derived_Values]FOR UPDATEAS start erklære @BusinessUnit nvarchar(50) Record set =BusinessUnit .' update [Derived_Values_Test] set --BusinessUnit =i.BusinessUnit --,Questions =i.Questions Answer =i.Answer from [Derived_Values] indre join indsat i på [Derived_Values].BusinessUnit =i.BusinessUnit._Val] =i.BusinessUnit._Val [Derived_Values] i.QuestionsendgoCREATE TRIGGER trgAfterDelete ON [Derived_Values]FOR DELETEAS 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.Questionsendgoinsert Derived_Values ​​(BusinessUnit,Questions, Answer) værdier ('BU1', 'Q11', 'A11')indsæt afledte_værdier (BusinessUnit,Questions, Answer) værdier ('BU1', 'Q12', 'A12')indsæt Afledte_Values ​​(BusinessUnit,Questions, Answer) værdier ( 'BU2', 'Q21', 'A21')indsæt afledte_værdier (BusinessUnit,Questions, Answer) værdier ('BU2', 'Q22', 'A22')OPDATERING Afledte_Værdier SET Answer='Opdateret Answers A11' fra Derived_Values ​​WHERE (BusinessUnit ='BU1') AND (Spørgsmål ='Q11');OPDATERING Afledte_Values ​​SET Answer='Opdateret Answers A12' fra Derived_Values ​​WHERE (Business'Unit) 'AND (Q2Q1) ');UPDATE Derived_Values ​​SET Answer='Opdateret svar A21' fra Derived_Values ​​WHERE (BusinessUnit ='BU2') AND (Spørgsmål ='Q21');OPDATERET Afledte_Values ​​SET Answer='Opdateret svar A22' fra Derivesd2Business2 ') OG (Spørgsmål ='Q22');--slet afledte_værdier; 

Og så:

meget Opdateret svar A22


  1. Konverter SQLITE SQL dump-fil til POSTGRESQL

  2. Få MySQL til at fungere på OSX 10.7 Lion

  3. SQLite JSON_TREE()

  4. Problemer med at definere fremmednøgler (MySQL)