首页 > 解决方案 > 在 SQL Server 中删除行只有一列为零

问题描述

我在 SQL Server 2012 中有 2 个表的数据库。

表A

aid, (used), max_count

表 B

bid, aid, x

在表 Bbid中是主键,aid是表 A 的外键。

在表 A 中,aid是主键,并且used是计算列,然后计算aid表 B 中使用的数量。

我想在表 A 中总是used<= max_count

如何控制max_count不低于表 A 的更新used

如何控制添加到表 B 中used不大于max_count

标签: sql-servertriggerscalculated-columns

解决方案


此触发器用于插入 B 和更新 A。您可能还需要其他触发器来更新 B。

CREATE TRIGGER tr_A 
   ON  dbo.A 
   INSTEAD OF UPDATE
AS 
BEGIN
    SET NOCOUNT ON;

    IF EXISTS (
        SELECT TOP 1 *
        FROM inserted
        WHERE used>max_count
    )
        RAISERROR('used cannot be higher than mox_count', 16, 1)
    ELSE
        UPDATE A SET
            A.max_count = I.max_count
        FROM A
        INNER JOIN inserted I ON I.aid = A.aid 

END;
GO

CREATE TRIGGER tr_B
   ON  dbo.B
   INSTEAD OF INSERT
AS 
BEGIN
    SET NOCOUNT ON;

    IF (
        SELECT TOP 1 A.max_count-A.used
        FROM inserted I
        INNER JOIN dbo.A ON I.aid = A.aid
    )<=0
        RAISERROR('used cannot be higher than mox_count', 16, 1)
    ELSE
        INSERT INTO dbo.B (bid, aid, x)
        SELECT bid, aid, x
        FROM inserted;
END;
GO

推荐阅读