-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtrigger.sql
113 lines (94 loc) · 3.06 KB
/
trigger.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
CREATE TABLE tblStudentsAudit
(ID INT IDENTITY(1,1) PRIMARY KEY,
AuditData VARCHAR(100)
)
--Insert trigger
CREATE TRIGGER tr_tblStudent_ForInsert
ON tblStudents FOR INSERT
AS
BEGIN
DECLARE @Id INT
SELECT @Id = Id FROM inserted
INSERT INTO tblStudentsAudit
VALUES('A new emoployee with Id='+CAST(@Id as varchar)+' on '+FORMAT(GETDATE(),'MMM dd, yyyy hh:mm:ss'))
END
--Delete trigger
CREATE TRIGGER tr_tblStudent_ForDelete
ON tblStudents FOR DELETE
AS
BEGIN
DECLARE @Id INT
SELECT @Id = Id FROM deleted
INSERT INTO tblStudentsAudit
VALUES('An existing emoployee with Id='+CAST(@Id as varchar)+' is deleted on '+FORMAT(GETDATE(),'MMM dd, yyyy hh:mm:ss'))
END
DELETE tblStudents WHERE Id=7
sp_help tblStudentsAudit
--Update trigger
ALTER TRIGGER tr_tblStudent_ForUpdate
ON tblStudents FOR UPDATE
AS
BEGIN
DECLARE @Id INT, @NewName VARCHAR(50),@NewEmail VARCHAR(50),
@OldName VARCHAR(50), @OldEmail VARCHAR(50),
@AuditStr NVARCHAR(500)
SELECT * INTO #TempTable FROM inserted
WHILE(EXISTS(SELECT Id FROM #TempTable))
BEGIN
SET @AuditStr=''
SELECT TOP 1 @Id=Id, @NewName=Name, @NewEmail = Email FROM #TempTable
SELECT @OldName=Name, @OldEmail = Email FROM deleted WHERE Id=@Id
SET @AuditStr = 'Student with Id='+CAST(@Id AS VARCHAR)+' changed. '
IF(@NewName<>@OldName)
SET @AuditStr += 'Name from '+@OldName+' to '+@NewName
IF(@NewEmail<>@OldEmail)
SET @AuditStr += ' Email from '+@OldEmail+' to '+@NewEmail
INSERT INTO tblStudentsAudit VALUES(@AuditStr)
DELETE #TempTable WHERE Id=@Id
END
END
UPDATE tblStudents SET Name= 'Md Ashiqur Rahman', Email='[email protected]' WHERE Id=1
SELECT * FROM tblStudentsAudit
--Instead of INSERT trigger
SELECT * FROM vwStudents
INSERT INTO vwStudents (Name, Gender,Department,DateOfBirth)
VALUES('Name','Male','Computer Science & Engineering','2000-01-01')
ALTER TRIGGER tr_vwStudents_InsteadofInsert
ON vwStudents INSTEAD OF INSERT
AS
BEGIN
DECLARE @GenderId INT, @DepartmentId INT
SELECT @GenderId = g.Id, @DepartmentId = d.Id
FROM inserted i
LEFT JOIN tblGender g ON g.Name = i.Gender
LEFT JOIN tblDepartment d ON d.Name = i.Department
--validation
IF(@GenderId IS NULL)
BEGIN
RAISERROR('Invalid Gender. Statement terminated',16,1)
RETURN
END
IF(@DepartmentId IS NULL)
BEGIN
RAISERROR('Invalid Department Name. Statement terminated',16,1)
RETURN
END
INSERT INTO tblStudents(Name,GenderId,DepartmentId,DateOfBirth,Email)
SELECT Name, @GenderId,@DepartmentId,DateOfBirth,Email FROM inserted
END
INSERT INTO vwStudents (Name, Gender,Department,DateOfBirth,Email)
VALUES('Mr Abc','Male','Computer Science & Engineering','2001-01-01','[email protected]')
SELECT * FROM tblStudents
SELECT * FROM vwStudents
SELECT * FROM tblDepartment
UPDATE vwStudents SET Department='Computer Science & Engineering' WHERE Id = 1
--Instead of Update
--https://csharp-video-tutorials.blogspot.com/2012/09/instead-of-update-triggers-part-46.html
--Instead of Delete
DELETE vwStudents WHERE Id=13
CREATE TRIGGER tr_vwStudents_InsteadOfDelete
ON vwStudents INSTEAD OF DELETE
AS BEGIN
DELETE tblStudents FROM tblStudents
JOIN deleted ON deleted.Id=tblStudents.Id
END