我想在sqlserver中创建条件触发器...

本文关键字:创建 条件 触发器 sqlserver | 更新日期: 2023-09-27 18:24:53

我有一个名为test的表和另一个名名为trigg的表。。。。。我想要的是…每当插入"name"为"rakesh"的数据进行测试时。。。它应该触发在"trigg"表中插入年龄。。。。

我自己试过了。。。。chk it…

create trigger trigger1 
on test
after insert
as
if((select name from test) like 'rakesh')
begin 
insert into trigg(age)
select name from test
end

但是没有奏效。。每当我插入测试。。得到这个错误:

Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

帮帮我。。。。

我想在sqlserver中创建条件触发器...

  • 您正在从测试中进行选择,而您应该从INSERTED进行选择。您希望您的语句根据插入的内容生效,而不是根据表中可能包含的内容生效。

  • 即使在更改之后,触发器也会为每条语句触发一次,而不是每行触发一次。如果插入影响多行,则INSERTED伪表将包含多行,因此子选择将失败。

建议修订:

create trigger trigger1 
on test
after insert
as
if EXISTS (select * from INSERTED where name like 'rakesh')
begin 
    insert into trigg(age)
    select name from INSERTED 
    where name like 'rakesh'
end

在没有看到触发器的情况下,我猜您做出了错误的假设,即在触发器中一次只处理一条记录,因此您试图将一些标量变量设置为插入或删除的字段的值,如下所示:

set @test = (select id from inserted)

您必须在编写触发器时假设在同一时间将有多个ilitple记录。这是集合论,而不是逐行处理。

另一种可能性是,您正在使用的操作查询中有一些子查询,并且它确实返回了多条记录。

另一种可能性是触发表上有一个写得不好的查询,这就是导致错误的原因。

这样的东西怎么样:

CREATE TRIGGER trigger1
ON test AFTER insert AS
INSERT INTO trigg (age)
SELECT name FROM INSERTED
WHERE name like 'rakesh'

我根据您提供的代码猜测您的表结构,但这应该更接近您的需求。