对于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
修改T-SQL触发删除逻辑以执行以下操作:
DELETE A
FROM SOA.dbo.photos_TEST A
INNER JOIN INSERTED B on
A.VALUE = B.VALUE
WHERE A.arrivaldatetime < B.arrivaldatetime
我想你需要删除所有旧值。如下调整的触发的伎俩。
触发
BEGIN
DELETE p
FROM SOA.dbo.photos_TEST p
INNER JOIN INSERTED i ON i.Value = p.Value
AND i.ArrivalDateTime > p.ArrivalDateTime
END