【发布时间】:2020-12-25 12:52:21
【问题描述】:
我有一个带有复合主键的表 Role。我必须从中删除值并检查它们是否不等于某个值(在触发器中)。我需要怎么做?
表格代码:
CREATE TABLE Role
(
roleName VARCHAR(50),
groupId INT,
CONSTRAINT FK_Group FOREIGN KEY (groupId) REFERENCES [Group] (groupId),
PRIMARY KEY (roleName, groupId),
canBan TINYINT DEFAULT (0) /* 0 or 1 */
)
触发代码,未获批准
CREATE TRIGGER DeleteRoleTrigger
ON [Role]
INSTEAD OF DELETE
AS
BEGIN
IF 'everyone' IN (SELECT roleName FROM deleted)
BEGIN
THROW 50002, 'Cannot delete role "everyone"! Nothing is deleted', 1
-- id severity state
END
ELSE
BEGIN
-- todo
DELETE
FROM Role
WHERE (EXISTS(SELECT groupId, roleName FROM deleted))
PRINT N'Роль удалена'
END
END
GO
【问题讨论】:
-
exists子查询与外部 (delete) 查询不相关。如果deleted中存在任何 行,那么它将删除Role中的所有 行。可能不是所需的功能。
标签: sql sql-server database tsql