[英]SQL Server Multi-row insert trigger
我已经测试了该触发器,但它仅适用于一个插入行。
触发器因多行插入而失败,我找不到修复触发器的语法。
有什么建议可以解决吗?
感谢stackoverflow用户,让我注意到了这个问题。
USE [MY_DB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[tr_update_father]
ON [dbo].[PROD_IVR_CALL]
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
DECLARE @tnumber nvarchar(50), @id_inserted int, @id_prod_file int;
select
@id_inserted = ins.id,
@tnumber = ins.tnumber ,
@id_prod_file = pf.ID_PROD_FILE
from inserted ins
inner join prod_failure pf on (ins.ID_PROD_FAILURE = pf.ID);
update prod_ivr_call
set id_father = sq.ID
from
(select min(pic.id) as ID
from prod_ivr_call pic
inner join prod_failure pf on (pic.ID_PROD_FAILURE = pf.ID)
where pic.tnumber = @tnumber
and pic.is_requested = 0
and pf.ID_PROD_FILE = @id_prod_file
group by pic.tnumber ) sq
END
您的UPDATE
语句在语法上不正确。 您实际上可以使用CTE
合并触发器的两个语句,然后对此CTE
执行UPDATE
:
ALTER TRIGGER [dbo].[tr_update_father]
ON [dbo].[PROD_IVR_CALL]
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
;WITH ToUpdate AS (
SELECT pic.id_father,
MIN(pic.id) OVER (PARTITION BY pic.tnumber) AS min_id
FROM prod_ivr_call pic
INNER JOIN join prod_failure pf ON pic.ID_PROD_FAILURE = pf.ID
JOIN inserted ins ON ins.ID_PROD_FAILURE = pf.ID
WHERE pic.tnumber = ins.tnumber AND pic.is_requested = 0
)
UPDATE ToUpdate
SET id_father = min_id
END
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.