Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 使用触发器回滚更新_Sql Server - Fatal编程技术网

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字段中输入值;我试图更新的记录的此字段为空。