【发布时间】:2013-05-30 23:26:43
【问题描述】:
我正在使用具有触发器的数据库,该触发器通过引发错误而不提交删除来防止删除某个表中的记录。如果要删除的记录的列具有特定值,我需要修改行为以允许删除。
这是当前代码:
CREATE TRIGGER [dbo].[MyTable_PreventDelete]
ON [dbo].[MyTable]
INSTEAD OF DELETE
AS
-- TODO: Only run the code below if Deleted = 0
ROLLBACK
RAISERROR('ERROR: That column may not be deleted.',16,1)
RETURN
GO
我试图简单地将错误调用包装在条件中,但似乎我不能简单地直接引用受影响行的列:
...
CREATE TRIGGER [dbo].[MyTable_PreventDelete]
ON [dbo].[MyTable]
INSTEAD OF DELETE
AS
IF IsDeleted = 0
BEGIN
ROLLBACK
RAISERROR('ERROR: That column may not be deleted.',16,1)
RETURN
END
GO
【问题讨论】:
-
你使用的是sql server还是其他数据库?
-
如果批处理中的一些记录是可删除的,而有些则不是,你想要什么行为?在 SQL Server 中,触发器对批量数据而非单行数据进行操作。
-
SQL Server 2005。如果批处理中的任何记录Deleted=0,则整个事务应该失败
标签: sql sql-server-2005 triggers sql-delete