У меня есть инструкция insert, которая выполняется во внутреннем триггере, но оператор insert вставляет в ItemLookups значение из ItemsProduced a, где он существует, вместо этого обновляет a.Casecount и только вставляет туда он не существует. Где я могу включить свои команды «Обновить» и «Установить» в этом запросе? Любые предложения? Спасибо за любую помощь.Вставить и выбрать последнюю строку из объединений
USE [**]
GO
/****** Object: Trigger [dbo].[spItemLookupNActuals] Script Date: 09/18/2014 14:30:09 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- =============================================
ALTER TRIGGER [dbo].[spItemLookupNActuals]
ON [dbo].[ItemsProduced]
AFTER INSERT,DELETE,UPDATE
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
INSERT INTO dbo.itemlookup
(
itemnumber,
cases,
[Description],
[Type],
wic,
elc,
totalelc,
lbspercase,
totallbs,
peoplerequired,
schedulehours,
rated,
capacity,
shift,
[DateTime],
[TimeStamp]
)
SELECT TOP 1
a.itemnumber,
a.casecount,
b.itemdescription,
b.divisioncode,
b.workcenter,
b.laborpercase,
a.casecount* b.laborpercase* c.ipcg,
b.lbspercase,
b.lbspercase* a.casecount,
b.personsreqd,
d.schedhours,
b.poundrating,
b.poundrating*d.schedhours,
a.shift,
a.datetime,
a.timestamp
FROM itemsproduced a
INNER JOIN masteritemlist b
ON a.itemnumber = b.itemnumber
CROSS apply
(
SELECT TOP 1
*
FROM itemmultipliers2 c
WHERE c.datetime = a.datetime
ORDER BY c.timestamp DESC)c
CROSS apply
(
SELECT TOP 1
*
FROM itemactuals d
WHERE d.datetime =a.datetime
AND d.wc = b.workcenter
AND d.shift= a.shift
ORDER BY d.timestamp DESC) d
WHERE NOT EXISTS
(
SELECT *
FROM itemlookup
WHERE itemnumber =a.itemnumber
AND shift=a.shift
AND datetime = a.datetime)
end
Возможно, разбить триггеры для вставки/обновления/удаления в отдельные, чтобы вы не пытались включить только что удаленную запись или вставить только что обновленную запись? –