所以,我需要一点帮助,我需要创建一个触发器,避免了值
最后一排的缺失假设我有:
SubjectID | ModuleNr
1792 | 1
1792 | 2
1222 | 3
我希望能够避免各SubjectID的最后一行被删除,所以在这种情况下将仅被删除的第一行。
我尝试了不同的方法(使用SQL Server 2012
),但是我不能在FOR DELETE之后使用For Each,也不能在Delete之前进行。
我尝试过的每种方法都让我无论如何都删除了该行。
请记住,这是我在SQL的第一学期,这是我的新手。
这是我尝试使用count以某种方式查看是否只有1个值:
CREATE TRIGGER curriculum.Keep_Last_Module
ON curriculum.Module
FOR DELETE
AS
BEGIN
DECLARE @count AS INT
SET @count = (SELECT COUNT(*) FROM curriculum.Module
WHERE SubjectID = (SELECT SubjectID FROM deleted) GROUP BY SubjectID)
IF (@count = 1)
BEGIN
RAISERROR('Last Module Cannot be Erased',16, 1)
END
END
提前谢谢
答案 0 :(得分:2)
我用下面的触发和它完全在一行中缺失的情况下,并在多个行的情况下删除它会阻止在一个subjectID的情况下,整个删除操作将违反这个条件:
CREATE TRIGGER curriculum.Keep_Last_Module
ON curriculum.Module
FOR DELETE
AS
BEGIN
If exists(SELECT SubjectID FROM deleted except SELECT SubjectID FROM curriculum.module)
BEGIN
RAISERROR('Last Module Cannot be Erased',16, 1)
ROLLBACK
END
END
END
答案 1 :(得分:2)
在您删除主题的所有行的情况下,您似乎希望它自动保留一个。
为此,您需要一个$("#card_days").append(/* Your card HTML */);
触发器,例如下面的示例(DEMO)
INSTEAD OF
答案 2 :(得分:0)
每个主题至少要保留一行。计算“之前”和“之后”的主题数:
CREATE TRIGGER curriculum.Keep_Last_Module
ON curriculum.Module
INSTEAD OF DELETE
AS
BEGIN
DECLARE @beforeSubjects INT;
DECLARE @afterSubjects INT;
SELECT @beforeSubjects = COUNT(DISTINCT m.subject),
@afterSubjects = COUNT(DISTINCT CASE WHEN d.ModuleNR IS NULL THEN m.subject END)
FROM curriculum.Module m LEFT JOIN
deleted d
ON m.ModuleNr = d.ModuleNr
IF (@beforeSubjects <> @afterSubjects)
BEGIN
RAISERROR('Last Module Cannot be Erased', 16, 1)
END;
DELETE m
FROM curriculum.module m JOIN
deleted d
ON m.ModuleNr = d.ModuleNr;
END;
答案 3 :(得分:0)
您可以检查- name: Setup local kubeconfig
become: true
become_user: vagrant
become_method: sudo
shell:
cmd: |
chown $(id -u):$(id -g) /home/vagrant/.kube/config
中是否存在针对同一deleted
的{{1}}中不存在记录的行,该行具有更大的module
。
subjectid