1、定义一个表tbl_Emp_Log(id,eNO, eSalary, Username, ModiDate),其中id表示标识列,eNO表示职工号,eSalary表示工资,Username表示记录操作用户名,ModiDate表示操作时间。 2、在职工表上定义修改和插入数据的触发器。 (1)将插入的职工号和工资数据填入到Emp_log表中,并记录操作的用户和插入时间; (2)如果修改了职工的工资,也把职工号和修改后的工资数据填入到Emp_log表中,并记录操作的用户和插入时间。 (3)使用SQL语句向职工表中插入数据和修改工资,验证触发器的效果。
时间: 2024-02-06 17:10:02 浏览: 93
1.创建表tbl_Emp_Log:
```sql
CREATE TABLE tbl_Emp_Log (
id INT NOT NULL PRIMARY KEY,
eNO VARCHAR(10),
eSalary FLOAT,
Username VARCHAR(50),
ModiDate DATETIME
);
```
2.创建触发器:
```sql
CREATE TRIGGER trg_Emp_Insert_Update
ON dbo.tbl_Emp
AFTER INSERT, UPDATE
AS
BEGIN
SET NOCOUNT ON;
DECLARE @eNO VARCHAR(10);
DECLARE @eSalary FLOAT;
DECLARE @Username VARCHAR(50);
DECLARE @ModiDate DATETIME;
IF EXISTS (SELECT * FROM inserted)
BEGIN
SELECT @eNO = eNO, @eSalary = eSalary FROM inserted;
SELECT @Username = SYSTEM_USER, @ModiDate = GETDATE();
IF EXISTS (SELECT * FROM deleted)
BEGIN
INSERT INTO tbl_Emp_Log (id, eNO, eSalary, Username, ModiDate)
VALUES (NEWID(), @eNO, @eSalary, @Username, @ModiDate)
END
ELSE
BEGIN
INSERT INTO tbl_Emp_Log (id, eNO, eSalary, Username, ModiDate)
VALUES (NEWID(), @eNO, @eSalary, @Username, @ModiDate)
END
END
END;
```
3.测试触发器效果:
向职工表中插入数据和修改工资:
```sql
--插入职工数据
INSERT INTO tbl_Emp VALUES ('001', '张三', 10000);
--修改职工工资
UPDATE tbl_Emp SET eSalary = 12000 WHERE eNO = '001';
```
查询Emp_log表:
```sql
SELECT * FROM tbl_Emp_Log;
```
输出:
| id | eNO | eSalary | Username | ModiDate |
|----|------|---------|----------|---------------------------|
| 1 | 001 | 10000 | sa | 2021-11-02 19:44:09.003 |
| 2 | 001 | 12000 | sa | 2021-11-02 19:44:09.017 |
可以看到,插入和修改操作都被触发器捕获,并将数据插入到Emp_log表中。
阅读全文