[英]Triggers in SQL Server
我是SQL的新手,正在阅读触发器在表上创建的两个触发器。以下是我的触发器-
CREATE trigger Test_TRIGGER_FOR
ON TEST_TABLE
for Insert
AS
if((Select ID from TEST_TABLE) =( Select ID from INSERTED))
BEGIN
PRINT 'you have successful using FOR'
END
ELSE
BEGIN
PRINT 'ERROR AFTER'
END
CREATE trigger Test_TRIGGER_AFTER
ON TEST_TABLE
AFTER Insert
AS
if((Select ID from TEST_TABLE) =( Select ID from INSERTED))
BEGIN
PRINT 'you have successful using AFTER'
END
ELSE
BEGIN
PRINT 'ERROR AFTER'
END
我已经成功创建了触发器,但是当我在表中插入数据时出现以下错误:
消息512,级别16,状态1,过程Test_TRIGGER_FOR,第5行子查询返回的值大于1。 当子查询遵循=,!=,<,<=,>,> =或将子查询用作表达式时,不允许这样做。 该语句已终止。
请告诉我我错了。
提前致谢。
在线上
if((Select ID from TEST_TABLE) =( Select ID from INSERTED))
如果表中有1个以上的条目,则(Select ID from TEST_TABLE)
将返回一个以上的值,这在此类子选择中是不允许的。
不过,目前尚不清楚您要在这里做什么。
这两个触发器的问题是此行:
if((Select ID from TEST_TABLE) =( Select ID from INSERTED))
尚不清楚您要在此处测试什么,但是TEST_TABLE和INSERTED表都可以包含多行。
问题出在您正在SELECT ID FROM TEST_TABLE
执行SELECT ID FROM TEST_TABLE
(返回多个记录)的情况下。 您需要为此添加一个WHERE
子句,以将其减少到1条记录,以使测试成功。
您可以尝试类似:
DECLARE @id int;
SELECT @id = ID from INSERTED;
SELECT ID
FROM TEST_TABLE
WHERE ID = @id;
IF @@ROWCOUNT > 0
BEGIN
PRINT 'you have successful using FOR'
END
ELSE
BEGIN
PRINT 'ERROR AFTER'
END
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.