在超市管理数据库中的商品表Goods上编写一个INSTEAD OF触发器,当向 Goods表插入记录时,先检查CategoryNO列上的值在Category中是否存在,如果存在则 执行插入操作,如果不存在,提示“商品类别不存在”。
时间: 2024-10-21 10:07:58 浏览: 41
在SQL中,你可以创建一个名为`insert_trigger`的INSTEAD OF触发器来实现在插入商品到Goods表之前检查分类是否存在的需求。以下是这个触发器的一个基本示例,假设我们有一个Category表,名为Category,其字段包括CategoryID(主键)和CategoryName:
```sql
CREATE TRIGGER insert_trigger
INSTEAD OF INSERT ON Goods
AS
BEGIN
DECLARE @category_name NVARCHAR(50);
SET @category_name = (SELECT CategoryName FROM inserted); -- 获取新插入行的CategoryNO
IF EXISTS (SELECT 1 FROM Category WHERE CategoryName = @category_name) -- 检查Category是否存在
BEGIN
INSERT INTO Goods SELECT * FROM inserted; -- 如果存在,则执行插入操作
END
ELSE
BEGIN
raiserror('商品类别【%s】不存在', 16, 1, @category_name); -- 提示错误信息
ROLLBACK; -- 插入操作回滚
END
END;
GO
```
在这个触发器中,`inserted`是一个内置的系统临时表,它包含了用户试图插入的所有数据。如果新的CategoryNO在Category表中找不到,触发器会抛出错误并回滚事务。
阅读全文