在职工表上定义修改和插入数据的触发器
时间: 2024-01-24 20:18:01 浏览: 107
在职工表上定义修改和插入数据的触发器,可以使用以下SQL语句:
-- 创建一个在插入和更新职工表时触发的触发器
CREATE TRIGGER trg_employee
ON employee
AFTER INSERT, UPDATE
AS
BEGIN
-- 在插入和更新职工表时执行的操作
-- 例如:更新员工表中的最后修改日期
UPDATE employee SET last_modified_date = GETDATE() WHERE employee_id IN (SELECT employee_id FROM inserted)
END
在上面的例子中,当在职工表上执行插入或更新操作时,这个触发器将被触发。在触发器中,我们可以定义需要执行的操作,例如更新表中的某些字段或者执行其他的业务逻辑。在这个例子中,我们更新了职工表中的最后修改日期字段。其中,GETDATE()函数返回当前的日期和时间。
需要注意的是,inserted表是一个特殊的表,用于存储插入和更新操作中插入的行。我们可以使用这个表来获取插入或更新的数据并进行操作。在上面的例子中,我们使用插入的行的employee_id来更新最后修改日期。
相关问题
定义一个表tbl_Emp_Log(eNO, eSalary, Username, ModiDate); --在职工表上定义修改和插入数据的触发器。
下面是在tbl_Emp_Log表上定义修改和插入数据的触发器的示例代码:
-- 创建触发器
CREATE TRIGGER trg_Emp_Log
ON tbl_Emp
AFTER INSERT, UPDATE
AS
BEGIN
-- 插入修改记录到tbl_Emp_Log表中
INSERT INTO tbl_Emp_Log (eNO, eSalary, Username, ModiDate)
SELECT
i.eNO,
i.eSalary,
SUSER_SNAME(),
GETDATE()
FROM inserted i;
END;
这个触发器将在tbl_Emp表上的每次插入或更新操作后自动触发。它将会把修改的信息插入到tbl_Emp_Log表中,包括工号eNO、薪水eSalary、修改人Username以及修改时间ModiDate。其中,SUSER_SNAME()函数用于获取当前用户的用户名,GETDATE()函数用于获取当前时间。
1、定义一个表tbl_Emp_Log(id,eNO, eSalary, Username, ModiDate),其中id表示标识列,eNO表示职工号,eSalary表示工资,Username表示记录操作用户名,ModiDate表示操作时间。 2、在职工表上定义修改和插入数据的触发器。 (1)将插入的职工号和工资数据填入到Emp_log表中,并记录操作的用户和插入时间; (2)如果修改了职工的工资,也把职工号和修改后的工资数据填入到Emp_log表中,并记录操作的用户和插入时间。 (3)使用SQL语句向职工表中插入数据和修改工资,验证触发器的效果。
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表中。
阅读全文