-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSQLtriggerpractise.sql
More file actions
196 lines (175 loc) · 3.77 KB
/
SQLtriggerpractise.sql
File metadata and controls
196 lines (175 loc) · 3.77 KB
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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
create database anjali_1048
use anjali_1048
---creating department table
CREATE TABLE Departments
(
DepartmentID INT PRIMARY KEY,
DepartmentName VARCHAR(50),
Location VARCHAR(50)
);
--- creating Employees Table
CREATE TABLE Employees
(
EmployeeID INT PRIMARY KEY,
FirstName VARCHAR(50),
LastName VARCHAR(50),
Salary DECIMAL(10,2),
DepartmentID INT,
HireDate DATE,
FOREIGN KEY (DepartmentID) REFERENCES Departments(DepartmentID)
);
--- creating Products Table
CREATE TABLE Products
(
ProductID INT PRIMARY KEY,
ProductName VARCHAR(50),
Category VARCHAR(50),
Price DECIMAL(10,2),
StockQuantity INT
);
--- creating Orders Table
CREATE TABLE Orders
(
OrderID INT PRIMARY KEY,
ProductID INT,
Quantity INT,
OrderDate DATE,
FOREIGN KEY (ProductID) REFERENCES Products(ProductID)
);
--- creating EmployeeAudit Table
CREATE TABLE EmployeeAudit
(
AuditID INT PRIMARY KEY IDENTITY(1,1),
EmployeeID INT,
OldSalary DECIMAL(10,2),
NewSalary DECIMAL(10,2),
ChangeDate DATETIME
);
--- GetAllEmployees
CREATE PROCEDURE GetAllEmployees
AS
BEGIN
SELECT * FROM Employees;
END;
Execution:
EXEC GetAllEmployees;
--- GetEmployeeByID
CREATE PROCEDURE GetEmployeeByID
@EmployeeID INT
AS
BEGIN
SELECT *
FROM Employees
WHERE EmployeeID = @EmployeeID;
END;
Execution:
EXEC GetEmployeeByID 101;
--- GetEmployeesByDepartment
CREATE PROCEDURE GetEmployeesByDepartment
@DepartmentID INT
AS
BEGIN
SELECT *
FROM Employees
WHERE DepartmentID = @DepartmentID;
END;
Execution:
EXEC GetEmployeesByDepartment 1;
--- AddNewEmployee
CREATE PROCEDURE AddNewEmployee
@FirstName VARCHAR(50),
@LastName VARCHAR(50),
@Salary DECIMAL(10,2),
@DepartmentID INT,
@HireDate DATE
AS
BEGIN
INSERT INTO Employees
(FirstName, LastName, Salary, DepartmentID, HireDate)
VALUES
(@FirstName, @LastName, @Salary, @DepartmentID, @HireDate);
END;
Execution:
EXEC AddNewEmployee 'Rahul','Sharma',45000,1,'2024-01-10';
--- UpdateEmployeeSalary
CREATE PROCEDURE UpdateEmployeeSalary
@EmployeeID INT,
@NewSalary DECIMAL(10,2)
AS
BEGIN
UPDATE Employees
SET Salary = @NewSalary
WHERE EmployeeID = @EmployeeID;
END;
Execution:
EXEC UpdateEmployeeSalary 101,60000;
--- GetProductsByCategory
CREATE PROCEDURE GetProductsByCategory
@Category VARCHAR(50)
AS
BEGIN
SELECT *
FROM Products
WHERE Category = @Category;
END;
Execution:
EXEC GetProductsByCategory 'Electronics';
--- GetTotalEmployeesByDepartment
CREATE PROCEDURE GetTotalEmployeesByDepartment
AS
BEGIN
SELECT
DepartmentID,
COUNT(*) AS TotalEmployees
FROM Employees
GROUP BY DepartmentID;
END;
Execution:
EXEC GetTotalEmployeesByDepartment;
--- TRIGGERS
--- AFTER INSERT Trigger on Employees
CREATE TRIGGER trg_AfterEmployeeInsert
ON Employees
AFTER INSERT
AS
BEGIN
PRINT 'New Employee Added Successfully';
END;
--- AFTER UPDATE Trigger (Salary Audit)
CREATE TRIGGER trg_LogSalaryChange
ON Employees
AFTER UPDATE
AS
BEGIN
INSERT INTO EmployeeAudit
(EmployeeID, OldSalary, NewSalary, ChangeDate)
SELECT
d.EmployeeID,
d.Salary,
i.Salary,
GETDATE()
FROM deleted d
JOIN inserted i
ON d.EmployeeID = i.EmployeeID
WHERE d.Salary <> i.Salary;
END;
---AFTER INSERT Trigger on Orders (Reduce Stock)
CREATE TRIGGER trg_UpdateStockAfterOrder
ON Orders
AFTER INSERT
AS
BEGIN
UPDATE Products
SET StockQuantity = StockQuantity - i.Quantity
FROM Products p
JOIN inserted i
ON p.ProductID = i.ProductID;
END;
---INSTEAD OF DELETE Trigger on Products
CREATE TRIGGER trg_PreventProductDelete
ON Products
INSTEAD OF DELETE
AS
BEGIN
PRINT 'Product deletion is not allowed';
END;