Sql server 使用触发器回滚更新
我试图创建一个触发器,该触发器将根据字段中是否存在值回滚更新或删除。 触发因素是:Sql server 使用触发器回滚更新,sql-server,Sql Server,我试图创建一个触发器,该触发器将根据字段中是否存在值回滚更新或删除。 触发因素是: CREATE TRIGGER [dbo].[tr_CheckValidation_Observation] ON [dbo].[tbl_observation] AFTER UPDATE, DELETE AS IF EXISTS (SELECT * FROM deleted as d WHERE d.verificationDate IS NOT NULL) BEGIN RAIS
CREATE TRIGGER [dbo].[tr_CheckValidation_Observation]
ON [dbo].[tbl_observation]
AFTER UPDATE, DELETE
AS
IF EXISTS (SELECT *
FROM deleted as d
WHERE d.verificationDate IS NOT NULL)
BEGIN
RAISERROR ('Cannot change data that has been validated', 16, 1);
ROLLBACK TRANSACTION;
RETURN
END;
GO
目前,所有记录的VerfiedDate为空
如果我运行这个:
IF EXISTS (select * from tbl_observation
where verificationDate is not null)
BEGIN
print 'Verification Date has values'
END
ELSE
BEGIN
print 'Verification Date has no values'
update tbl_observation set verificationDate = GETDATE() where water_year = 2002
END
我得到:
验证日期没有值
Msg 50000,16级,状态1,程序tr_检查验证_观察,第12行无法更改数据
已验证Msg 3609,16级,状态1,程序
tr_修改了_观察,第6行事务在触发器中结束。
批处理已中止
我是否错误地使用了已删除的表,或者是否有其他方法锁定单个行
谢谢 您使用的是在触发操作后触发的AFTER触发器。你需要在这里使用而不是触发器。对于这个简单的要求,你真的不需要触发器,只要使你的
verificationDate
列notnull
可以。谢谢M.阿里,我想我还不够清楚。verificationDate允许NULL,并且在创建记录时为NULL。当用户说数据是干净的时,此字段将获取日期时间。我想锁定已标记为干净的记录。但是,触发器阻止我在verificationDate字段中输入值;我试图更新的记录的此字段为空。