2017-10-20 15 views
-1

Am ayant deux tables comme étudiants et StudentHistory dans SQL Server, si un changement se produit dans le tableau étudiant que Trigger devrait mettre à jour StudentHistory table.Comment exécuter un TRIGGER dans MSSQl?

Tables:

CREATE TABLE Student (
    Id int, 
    Name varchar(20), 
    Dept varchar(10), 
    Age int, 
    Cratedby int, 
    CreatedTime datetime, 
    Modeifideby int, 
    ModifiedTime datetime, 
    Flag varchar(5) 
) 

table Histoire,

CREATE TABLE StudentHistory (
    Id int, 
    Actiontaken varchar(50), 
    ActionTime dateTime, 
    Cratedby int, 
) 

Trigger,

CREATE TRIGGER wsrd.tr_Student on 
wsrd.Student 
AFTER INSERT 
AS 

insert into wsrd.StudentHistory 
      (Actiontaken,ActionTime,Cratedby) 
    (SELECT concat('Inserted-',i.id),i.CreatedTime,i.Cratedby from wsrd.Student s, inserted i where s.id=i.Id); 
GO 

La condition est,

  1. Le déclencheur ne devrait être exécuté que si les colonnes Modeifideby, ModifiedTime et Flag sont insérées dans la table Étudiant.
    1. Si Id, Nom, Dept, age, CreatedTime et Flag signifient que le trigger ne doit pas être exécuté.

Comment y parvenir?

+2

MySQL ou SQL Server? – user8527410

+0

inséré ou mis à jour? Ou les deux? Qu'en est-il supprimé? – HoneyBadger

+2

Travail à domicile, et vous voulez que nous le fassions pour vous ... Au moins nous montrer votre tentative de code actuelle. – jarlh

Répondre

0
CREATE TRIGGER trStudent 
ON dbo.[Student] 
FOR INSERT 
AS 
BEGIN 
    INSERT INTO dbo.[StudentHistory] 
     (Id, Actiontaken, ActionTime, Cratedby) 
    SELECT i.Id, i.Flag , i.CreatedTime, i.Cratedby 
    FROM inserted i 
    WHERE (i.Modeifideby > '' OR i.ModifiedTime > '01-01-1900' or i.Flag > '') 
END 
+2

'<> NULL' ... Est-ce que ça marche vraiment? – jarlh

+0

Merci. Vérification> '' est la bonne façon d'y parvenir – Karthik

+0

Ou peut-être 'IS NOT NULL'? – jarlh