子查询返回多个值。在MS SQL 2005年触发

问题描述 投票:2回答:2

对于INSERT触发器一个很简单的保持在一次插入多行时返回错误“子查询返回多个值。”。当我行插入到表SOA.dbo.photos_TEST使用如下语句;

INSERT INTO SOA.dbo.photos_TEST (id,length,picture,type,name,value,arrivaldatetime)
SELECT  VW.id, ... ,
FROM SOA.dbo.AeosPhotoTEST_VW vw
WHERE ...

插入失败。但是,当我顶(1)添加到SELECT语句中的触发器不报告错误。所以,可能是“VALUE SELECT从安装”,在触发语句也inserted表中返回所有行。我应该在触发througg完全插入,行循环?任何的建议是值得欢迎的。

触发器的当前的代码;

SELECT @VALUE = (SELECT VALUE FROM INSERTED)

SET NOCOUNT ON

BEGIN
    DELETE FROM SOA.dbo.photos_TEST 
    WHERE   (value = @VALUE ) 
    AND (arrivaldatetime < (SELECT arrivaldatetime 
                FROM INSERTED
                WHERE value = @VALUE))
END
sql-server triggers
2个回答
3
投票

修改T-SQL触发删除逻辑以执行以下操作:

DELETE A
FROM SOA.dbo.photos_TEST A
   INNER JOIN INSERTED B on
       A.VALUE = B.VALUE
WHERE A.arrivaldatetime < B.arrivaldatetime 

1
投票

我想你需要删除所有旧值。如下调整的触发的伎俩。

触发

  BEGIN 
    DELETE p
    FROM  SOA.dbo.photos_TEST p
          INNER JOIN INSERTED i ON i.Value = p.Value
                                   AND i.ArrivalDateTime > p.ArrivalDateTime
  END
© www.soinside.com 2019 - 2024. All rights reserved.