SQL surver 帐户(编号,姓名,余额,建立日期,储蓄所编号) 储蓄所(编号,名称,地址,人数,所属城市) 借贷(帐户,借贷类型,金额,日期) 建立储蓄所的delete 触发器,只有当此储蓄所没有帐户时才可删除,若有销售记录不能删除。
时间: 2023-11-24 15:07:26 浏览: 68
好的,下面是一个建立储蓄所的 delete 触发器的示例代码,它满足您的要求:
```
CREATE TRIGGER before_savings_delete
ON 储蓄所
INSTEAD OF DELETE
AS
BEGIN
DECLARE @account_count INT;
DECLARE @sale_count INT;
-- 查询储蓄所是否有帐户
SELECT @account_count = COUNT(*) FROM 帐户 WHERE 储蓄所编号 = deleted.编号;
-- 查询储蓄所是否有销售记录
SELECT @sale_count = COUNT(*) FROM 借贷 WHERE 帐户 IN (SELECT 编号 FROM 帐户 WHERE 储蓄所编号 = deleted.编号) AND 借贷类型 = '销售';
-- 如果储蓄所有帐户或销售记录,则不能删除
IF @account_count > 0 OR @sale_count > 0
BEGIN
RAISERROR('此储蓄所有帐户或销售记录,不能删除!', 16, 1);
END
ELSE
BEGIN
DELETE FROM 储蓄所 WHERE 编号 = deleted.编号;
END
END
```
该触发器会在删除储蓄所记录之前,先查询该储蓄所是否有关联的帐户记录和销售记录。如果有关联的帐户记录或销售记录,则触发器会抛出一个错误,阻止删除储蓄所记录。如果没有关联的帐户或销售记录,则触发器会执行删除操作。该触发器使用了 SQL Server 的 INSTEAD OF DELETE 语句,表示在执行删除操作时,会先执行该触发器中的代码,然后再真正删除记录。
阅读全文