У меня есть следующий код в триггере, который работает разработан.Я хотел бы пойти дальше по этому правилу триггера, установив значение CommissionAmount равным 0,00, если в счете-фактуре есть 1 строка сведений о счете-фактуре, и изменив @IfMenu на другую букву.
ЕСЛИ детали счета, как, например, имеют более 1 строки, значение CommissionAmount должно быть равно 0,00, а @IfMenu может оставаться как «C».
Когда записи обрабатываются, IfMenu будет 'C'.Это должно измениться на 'M' для счетов, которые имеют только 1 InvoiceID в таблице InvoiceDetails.Когда InvoiceID имеет 2 или более InvoiceID в таблице InvoiceDetails, IfMenu может оставаться как C.
У меня возникает проблема, когда SQL обрабатывает строки в таблице InvoiceDetails, а InvoiceID '123' имеет 3 строки в первых 2строки изменятся на IfMenu 'M', а затем вернутся обратно к 'C', когда третья строка будет обработана из-за того, что последняя строка не соответствует критериям оператора IF.
Я хотел бы знать, как я могу сгруппировать строки в таблице InvoicesDetails, чтобы, если InvoiceID = '123' и их было больше 2, IfMenu оставалось бы как 'C'
Я попытался использовать курсор, хотя я не могу использовать курсор в этой базе данных из-за производительности.
Также попытался использовать @@ ROWCOUNT и не повезло!
if (@SubmitTo = 2) and @ProductCode in ('3', '14') and @IfMenu in ('C','D') and @Branch = '9' and @CAmount <> 0.00 and @VendorNumber not in ( 'DEFAULT', '') and @VendorNumber is not null
begin
update top (1) IfInvoiceDetails
set CommissionAmount = 0.00
where InvoiceDetailID = @InvoiceDetailID
insert into tblInterfaceOverrides (InvoiceID,InvoiceDetailID,ActionTaken,OriCAmount, JobNumber)
values (@InvoiceID,@InvoiceDetailID,'Set Commission Amount to 0.00',@CAmount, 7)
end
update top (1) IfInvoices
set IfMenu = 'M', Record = (select COALESCE(max(Record),0)+1 from IfInvoices where IfMenu = 'M')
where IfInvoices.InvoiceID = @InvoiceID