sql server chufaqi
时间: 2024-12-26 16:20:39 浏览: 4
### SQL Server 触发器使用教程
#### 创建触发器
创建触发器涉及编写 `CREATE TRIGGER` 语句。此语句允许指定在特定事件发生时执行的操作。
```sql
CREATE TRIGGER trg_ExampleTrigger
ON TableName
AFTER INSERT, UPDATE, DELETE
AS
BEGIN
-- 执行逻辑
END;
```
上述代码展示了如何定义一个简单的触发器,该触发器会在对 `TableName` 表进行插入、更新或删除操作后被激活[^1]。
#### 插入触发器示例
下面是一个具体的例子,展示了一个用于记录新员工入职日期的日志表:
```sql
CREATE TABLE Employees (
EmployeeID int PRIMARY KEY,
Name nvarchar(50),
HireDate date
);
CREATE TABLE LogEntries (
EntryID int IDENTITY(1,1) PRIMARY KEY,
Message nvarchar(max),
Timestamp datetime DEFAULT GETDATE()
);
CREATE TRIGGER trg_LogEmployeeHire ON Employees
FOR INSERT
AS
BEGIN
DECLARE @Name NVARCHAR(50);
SELECT @Name = i.Name FROM inserted i;
INSERT INTO LogEntries (Message)
VALUES ('New employee hired: ' + @Name);
END;
```
这段脚本首先建立了两个表格——一个是用来保存雇员信息的 `Employees` 表格;另一个是用来追踪日志条目的 `LogEntries` 表格。接着创建了名为 `trg_LogEmployeeHire` 的触发器,在每次有新的雇员加入到 `Employees` 表中时会向 `LogEntries` 中添加一条相应的日志记录。
#### 更新和删除触发器示例
对于更新和删除动作同样也可以设置触发器来响应。这里给出一个处理工资变更的通知机制作为实例:
```sql
ALTER TRIGGER trg_SalaryChangeNotification ON Employees
INSTEAD OF UPDATE
AS
BEGIN
IF EXISTS(SELECT * FROM deleted WHERE Salary <> inserted.Salary)
BEGIN
PRINT 'Salary change detected!';
-- 这里可以放置发送邮件或其他通知方式的具体实现
-- 实际上应用更改
UPDATE E SET E.Salary = I.Salary
FROM Employees AS E INNER JOIN inserted AS I ON E.EmployeeID = I.EmployeeID;
END
END;
```
在这个案例中,通过 `INSTEAD OF` 类型的触发器替代默认行为,并且只当检测到薪水发生变化的时候才打印提示信息并实际更新薪资字段。
阅读全文