lps小刘 2018-09-27 09:42
浏览 1721

INSERT触发器问题--------

--创建INSERT触发器
IF EXISTS (SELECT * FROM sys.objects WHERE name='tr_test' AND type='tr')
DROP TRIGGER tr_test
GO
CREATE TRIGGER tr_test ON Test
AFTER INSERT AS
IF (SELECT id from Test)>20
BEGIN
PRINT'NOT OVER 20'
ROLLBACK
END
GO

我第一次是上面这么写的,Test表中已有很多数据,在我执行插入数据时,就会报错:

消息 512,级别 16,状态 1,过程 tr_test,第 3 行
子查询返回的值不止一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。

语句已终止。

第二次我修改了一下:
--创建INSERT触发器
IF EXISTS (SELECT * FROM sys.objects WHERE name='tr_test' AND type='tr')
DROP TRIGGER tr_test
GO
CREATE TRIGGER tr_test ON Test
AFTER INSERT AS
IF 20<ANY(SELECT id from Test)
BEGIN
PRINT'NOT OVER 20'
ROLLBACK
END
GO

但是这种写法就会检查已有数据是否有id大于20 的情况,然后也插入不了数据了,报错是:

NOT OVER 20
消息 3609,级别 16,状态 1,第 1 行

事务在触发器中结束。批处理已中止。

是不是我的IF写的有问题,请问这个触发器该怎么写才行?

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥40 复杂的限制性的商函数处理
    • ¥15 程序不包含适用于入口点的静态Main方法
    • ¥15 素材场景中光线烘焙后灯光失效
    • ¥15 请教一下各位,为什么我这个没有实现模拟点击
    • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
    • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
    • ¥20 有关区间dp的问题求解
    • ¥15 多电路系统共用电源的串扰问题
    • ¥15 slam rangenet++配置
    • ¥15 有没有研究水声通信方面的帮我改俩matlab代码