poptrzylem sobie profilerem co robi sie w bazie podczas zapisu dokumentu, i zobaczylem ze po insercie do dok_Pozycja wszystki pozycji jest wykonywany jeszcze update na tabeli dok__Dokument, czy tak sie dzieje przy kazdym dokumencie i kazdym warunku czy nie, bo tego nie wiem i czy jezeli trigger by mial nastepujaca postac to by to dzialalo?:
USE [testowy_pelny]
GO
/****** Object: Trigger [dbo].[us_kredyt_test] Script Date: 2018-10-03 19:37:07 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TRIGGER [dbo].[us_kredyt_test]
ON [dbo].[dok__Dokument]
AFTER UPDATE
AS
BEGIN
SET NOCOUNT ON;
IF(EXISTS(SELECT dok_Typ FROM inserted WHERE dok_Typ IN(2,21)))
BEGIN
DECLARE @waga MONEY;
DECLARE @dopuszczalna_waga MONEY;
DECLARE @id_dok INT;
SET @id_dok = (SELECT dok_Id FROM inserted);
SET @waga = (SELECT SUM(ob_Ilosc*tw_Masa) FROM dok_Pozycja LEFT JOIN tw__Towar ON tw_Id=ob_TowId WHERE ob_DokHanId=@id_dok AND NOT EXISTS(SELECT TOP 1 tw_Id FROM tw__Towar WHERE tw_IdGrupa=217 AND tw_Id=ob_TowId));
SET @dopuszczalna_waga = (
SELECT SUM(
CASE ob_TowId
WHEN 258 THEN 10
WHEN 1212 THEN ob_Ilosc*30
WHEN 1214 THEN 30
WHEN 7260 THEN 5
...
ELSE 3000
END
) FROM dok_Pozycja WHERE ob_DokHanId=@id_dok AND EXISTS(SELECT TOP 1 tw_Id FROM tw__Towar WHERE tw_IdGrupa=217 AND tw_Id=ob_TowId)
);
IF(@waga > @dopuszczalna_waga)
RAISERROR('<msg>Waga wszystki pozycji przekracza dopuszczalną wagę dla wybranych kurierów</msg>', 16, 1)
END
END