MC
ALTER TRIGGER rfm_check_list_trIЧтобы понять, в каком месте происходит ошибка, взял в триггере выборку значений с тем же условием, что в UPDATE, и записал их в таблицу отладки chistyakov.error_log. После обновления, взял обновлённые значения, сохранил их в переменную @updated и тоже записал их в таблицу отладки. В итоге стало выглядеть так
ON dbo.rfm_check_list
AFTER INSERT
AS
BEGIN
-- Подразумеваю, что при добавлении новой даты в перечни экстремистов, эта дата автоматически будет приплюсовываться к нужным значениям отдельной таблицы. Добавление в rfm_check_list подразумевается по одной строке.
DECLARE @extremist_date dbo.DT_DATE;
SELECT
@extremist_date = i.list_date
FROM inserted AS i
IF (@extremist_date IS NOT NULL
AND @extremist_date >= (SELECT MAX(list_date) FROM rfm_check_list WHERE list_kind = 0) )
BEGIN
UPDATE vgfv
SET vgfv.SVALUE += ', ' + dbo.FormatDateTime('dd.MM.yyyy', @extremist_date)
FROM dbo.VG_FIELD_VALUES as vgfv
INNER JOIN dbo.ORDERS AS o on o.id = vgfv.REF
WHERE vgfv.FIELDID = 338
AND o.CREATIONDATETIME < @extremist_date
AND ( ( o.ORDERSTATUS in (4, 6) AND o.RETURNDATETIME >= floor( @extremist_date) )
OR o.ORDERSTATUS = 2
OR ( o.ORDERSTATUS = 3 AND o.ORDERSTATUSCHANGEDATETIME >= floor( @extremist_date) )
OR ( o.ORDERSTATUS =5 AND o.CLOSEDATETIME >= floor( @extremist_date) )
);
END
END
ALTER TRIGGER rfm_check_list_trIDECLARE @updated table (deleted nvarch
ON dbo.rfm_check_list
AFTER INSERT
AS
BEGIN
@updated table (deleted nvarch
ar(4000), inserted nvarchar(4000), fieldid int)INSERT INTO chistyakov.error_log (module_name, error_values)
DECLARE @extremist_date dbo.DT_DATE;
SELECT
@extremist_date = i.list_date
FROM inserted AS i
IF (@extremist_date IS NOT NULL
AND @extremist_date >= (SELECT MAX(list_
date) FROM rfm_check_list WHERE list_kind = 0) )
BEGIN
SELECT OBJECT_NAME(@@PROCID), (
SELECT
vgfv.SVALUE as SVALUE_old, vgfv.SVALUE + ', ' + dbo.FormatDateTime('dd.MM.yyyy', @extremist_date) as SVALUE_new, REF
FROM dbo.VG_FIELD_VALUES as vgfv
INNER JOIN dbo.ORDERS AS o on o.id = vgfv.REF
WHERE vgfv.FIELDID = 338
AND o.CREATIONDATETIME < @extremist_date
AND ( ( o.ORDERSTATUS in (4, 6) AND o.RETURNDATETIME >= floor( @extremist_date) )
OR o.ORDERSTATUS = 2
OR ( o.ORDERSTATUS = 3 AND o.ORDERSTATUSCHANGEDATETIME >= floor( @extremist_date) )
OR ( o.ORDERSTATUS =5 AND o.CLOSEDATETIME >= floor( @extremist_date) )
)
FOR XML PATH, R@PROCID), (
SELECT
vgfv.SVALUE as SVALUE_old, vgfv.SVALUE + ', ' + dbo.FormatDateTime('dd.MM.yyyy', @extremist_date) as SVALUE_new, REF
FROM dbo.VG_FIELD_VALUES as vgfv
INNER JOIN dbo.ORDERS AS o on o.id = vgfv.REF
WHERE vgfv.FIELDID = 338
AND o.CREATIONDATETIME < @extremist_date
AND ( ( o.ORDERSTATUS in (4, 6) AND o.RETURNDATETIME >= floor( @extremist_date) )
OR o.ORDERSTATUS = 2
OR ( o.ORDERSTATUS = 3 AND o.ORDERSTATUSCHANGEDATETIME >= floor( @extremist_date) )
OR ( o.ORDERSTATUS =5 AND o.CLOSEDATETIME >= floor( @extremist_date) )
)
FOR XML PATH, ROOT('rows')
) ;
UPDATE vgfvOUTPUT deleted.SVALUE, inserted.SVALUE, 338 into @updated(deleted, inserted, fieldid)
SET vgfv.SVALUE += ', ' + dbo.FormatDateT
ime('dd.MM.yyyy', @extremist_date)
@updated(deleted, inserted, fieldid)
FROM dbo.VG_FIELD_VALUES as vgfv
INNER JOIN dbo.ORDERS AS o on o.id = vgfv.REF
WHERE vgfv.FIELDID = 338
AND o.CREATIONDATETIME < @extremist_date
AND ( ( o.ORDERSTATUS in (4, 6) AND o.RETURNDATETIME >= floor( @extremist_date) )
OR o.ORDERSTATUS = 2
OR ( o
.ORDERSTATUS = 3 AND o.ORDERSTATUSCHANGEDATETIME >= floor( @extremist_date) )
OR ( o.ORDERSTATUS =5 AND o.CLOSEDATETIME >= floor( @extremist_date) )
);
END
INSERT INTO chistyakov.error_log (module_name, error_values)SELECT OBJECT_NAME(@@PROCID), (
select deleted, inserted, 1 as updated, fieldid from @updated for xml path, root ('rows')
)
@PROCID), (
select deleted, inserted, 1 as updated, fieldid from @updated for xml path, root ('rows')
)
END