sql-server - 在 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
?
解决方案
此触发器用于插入 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
推荐阅读
- python - 在 if 语句检查,Python 池上休眠线程
- python - Python cx_Oracle 绑定变量列表
- regex - 如何在 Visual Studio Code 正则表达式中查找和替换某些文本?
- javascript - 使用 push() 方法时如何避免二维数组中的重复?
- airflow - 将其他参数传递给 on_failure_callback
- c++ - Visual Studio 无法打开项目
- python - 我什么时候可以在 Django 中使用“请求”对象?
- tensorflow - 在数据集解析器函数中加载 NumPy 数组
- spring-cloud-sleuth - 使用 spring-cloud-sleuth 自定义跟踪日志
- python - 有没有办法制作元函数/元初始化器?