首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >触发器句柄多个更新

触发器句柄多个更新
EN

Stack Overflow用户
提问于 2017-02-23 19:46:08
回答 1查看 68关注 0票数 0

在更新后我有了一个触发器:

代码语言:javascript
复制
CREATE TRIGGER tgr_passagier_vlucht
ON Vlucht
AFTER UPDATE
AS
BEGIN
IF @@ROWCOUNT=0
    RETURN
SET NOCOUNT ON
IF EXISTS 
     (SELECT *
     FROM inserted I
     WHERE EXISTS(SELECT * FROM PassagierVoorVlucht P WHERE P.vluchtnummer = I.vluchtnummer))
BEGIN
    ROLLBACK TRANSACTION
    RAISERROR('Cannot update, Passenger is linked to flight ', 16,1)            
END                                                                   
END

我还有一些测试用例:

代码语言:javascript
复制
/*TestCase 1 --------------True*/
UPDATE Vlucht
SET gatecode = 'B'
WHERE vluchtnummer = 5314

/*TestCase 2 --------------True*/
UPDATE Vlucht
SET gatecode = 'A'
WHERE vluchtnummer = 5318

/*TestCase 3 --------------False*/
UPDATE Vlucht
SET gatecode = 'B'
WHERE vluchtnummer = 5316

/*TestCase 4 --------------False*/
UPDATE Vlucht
SET gatecode = 'B'
WHERE vluchtnummer = 5317

如果我按这个顺序运行测试的话,它就能正常工作。我收到消息:

(1行受影响) (1行受影响) Msg 50000,16级,状态1,过程tgr_passagier_vlucht,19号线无法更新,乘客链接到Msg 3609,16级,状态1,16号线。交易以触发器结束。批处理已被中止。

但是,例如,当我使用订单4、3、2、1运行测试用例时,它说:

Msg 50000,16级,状态1,过程tgr_passagier_vlucht,19号线不能更新,乘客连接到Msg 3609,16级,状态1,6号线,交易在触发器中结束。批处理已被中止。

触发器被错误的测试用例卡住了。为什么会这样呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-23 20:02:08

问题不在你的扳机里。

如果仔细查看错误消息,您将看到“批处理已被中止”。

由于所有这些更新都在同一个批处理中,因此一旦您收到错误,批处理将中止,并且不会继续执行进一步的语句。

您可以在每次更新后添加一个批处理分隔符(GO),以使它们在错误后继续。

代码语言:javascript
复制
UPDATE Vlucht
SET gatecode = 'B'
WHERE vluchtnummer = 5317
GO
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42424827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档