Once again .. I have a trigger below which there is a function to save / set the value in the esb column for a maximum of 1 row to a value of 0 (in each row the value of the loop is from Q-> 0-> R-> 1) When I insert more than 1 row, the "Subquery" trigger fails to return more than 1 values. This is not valid when the subquery follows the error on line 38, "IF ((SELECT esb FROM INSERTED) in (" 1 ", 'Q'))" statment.
I understand that "SELECT esb FROM INSERTED" will return all insert rows, but does not know how to process one row at a time. I also tried this by creating a temporary table and iterating through the result set, but subsequently found out that temporary tables based on the INSERTED table are not allowed.
any suggestions welcome (again)
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
ALTER TRIGGER [TR_PHOTO_AIU]
ON [SOA].[dbo].[photos_TEST]
AFTER INSERT,UPDATE
AS
DECLARE @MAXCONC INT
DECLARE @CONC INT
SET @MAXCONC = 1
SET NOCOUNT ON
If ( Update(ESB) )
BEGIN
IF ((SELECT esb FROM INSERTED) in ('1','Q'))
BEGIN
SET @CONC = (SELECT COUNT(*)
FROM SOA.dbo.photos_TEST pc
WHERE pc.esb in ('0','R'))
IF NOT ( @CONC >= @MAXCONC )
BEGIN
UPDATE TOP(@MAXCONC-@CONC) p2
SET p2.esb = '0'
FROM ( SELECT TOP(@MAXCONC-@CONC) p1.esb
FROM SOA.dbo.photos_TEST p1
INNER JOIN INSERTED i ON i.Value = p1.Value
AND i.ArrivalDateTime > p1.ArrivalDateTime
WHERE p1.esb = 'Q'
ORDER BY p1.arrivaldatetime ASC
) p2
END
END
END
source
share