繁体   English   中英

SQL Server中的触发器

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM