Paweł ole 4 Napisano 26 Czerwca 2018 Udostępnij Napisano 26 Czerwca 2018 w Trigger na tr__Transaction Utworzyłem następujący trigger w bazie CREATE TRIGGER [dbo].[ZamianaKurieraWParach2] ON [dbo].[tr__Transaction] WITH ENCRYPTION --sp_setapprole AFTER INSERT AS DECLARE @sztchar char DECLARE @sztuki int DECLARE @dostawa int SET @sztchar = (SELECT LEFT (tr_Source,1) FROM tr__Transaction WHERE tr_Id IN (SELECT DISTINCT tr_Id FROM Inserted)) SET @dostawa = (SELECT tr__Transaction.tr_DeliveryId FROM tr__Transaction WHERE tr_Id IN (SELECT DISTINCT tr_Id FROM Inserted)) IF ISNUMERIC(@sztchar) = 1 SET @sztuki = @sztchar ELSE SET @sztuki = 0 IF (@sztuki = 2) IF (@dostawa = 1059) BEGIN UPDATE tr__Transaction SET tr__Transaction.tr_DeliveryId = 1056 WHERE tr__Transaction.tr_Id IN (SELECT DISTINCT tr__Transaction.tr_Id FROM Inserted) UPDATE tr__Transaction SET tr__Transaction.tr_DelivererId = 1028 WHERE tr__Transaction.tr_Id IN (SELECT DISTINCT tr__Transaction.tr_Id FROM Inserted) END ELSE IF (@dostawa = 1060) BEGIN UPDATE tr__Transaction SET tr__Transaction.tr_DeliveryId = 1057 WHERE tr__Transaction.tr_Id IN (SELECT DISTINCT tr__Transaction.tr_Id FROM Inserted) UPDATE tr__Transaction SET tr__Transaction.tr_DelivererId = 1028 WHERE tr__Transaction.tr_Id IN (SELECT DISTINCT tr__Transaction.tr_Id FROM Inserted) END W zależności od pierwszej litery tytułu transakcji chcę wybierać dostawę/dostawcę. Niestety powyższy kod generuje błąd zapisu w bazie.Jakieś pomysły dlaczego? Używam podobnego triggera na tabeli tr_Item do zmiany ilości towaru w transakcji i wszystko działa ok, a tutaj błąd. Nie mam pomysłu dlaczego. Ręczna zmiana dostawy z poziomu bazy jest możliwa nie powoduje żadnego błędu. Cytuj Link to postu
Bartosz Rosa 1 785 Napisano 27 Czerwca 2018 Udostępnij Napisano 27 Czerwca 2018 w Trigger na tr__Transaction A jakieś szczegóły tego błędu są podane? Cytuj Link to postu
Paweł ole 4 Napisano 27 Czerwca 2018 Autor Udostępnij Napisano 27 Czerwca 2018 w Trigger na tr__Transaction Nie. Tylko dymek błąd zapisu do bazy danych. Ewentualnie jeśli zastosuje trigger instead of, a nie after to jest komunikat, błąd zapisu..., zapis naruszyłby integralność itd. Nie rozumiem tylko dlaczego ta zmiana miałaby naruszyć integralność. Cytuj Link to postu
Bartosz Rosa 1 785 Napisano 27 Czerwca 2018 Udostępnij Napisano 27 Czerwca 2018 w Trigger na tr__Transaction Jeśli mowa o integralności, to w pierwszej kolejności upewniłbym się czy podane identyfikator przy update są na pewno prawidłowe. Cytuj Link to postu
Paweł ole 4 Napisano 27 Czerwca 2018 Autor Udostępnij Napisano 27 Czerwca 2018 w Trigger na tr__Transaction Oczywiście podawane dane są prawidłowe. Przypisuję istniejącą dostawę i odpowiedniego dla niej dostawce. Identyfikatory istnieją i z poziomu Sello można utworzyć transakcję w której tr_DliveryId i tr_DelivererId będą takie jak próbuję wstawić przez triggera. Jakieś inne pomysły? Cytuj Link to postu
Bartosz Rosa 1 785 Napisano 27 Czerwca 2018 Udostępnij Napisano 27 Czerwca 2018 w Trigger na tr__Transaction Jeśli te idy są dobre to prawdopodobnie problem powoduje jakiś inny trigger. Spróbuj wykomentować jego zawartość i przedebugować go w Management Studio żeby odszukać linię, która powoduje problem. Cytuj Link to postu
Paweł ole 4 Napisano 27 Czerwca 2018 Autor Udostępnij Napisano 27 Czerwca 2018 w Trigger na tr__Transaction (edytowane) Znalazłem. Aż ciężko uwierzyć, że tak długo nie widziałem takiej głupoty SELECT DISTINCT tr__Transaction.tr_Id FROM Inserted zamiast SELECT DISTINCT tr_Id FROM Inserted Sorki za zamieszanie i dzięki za poświęcony czas. Edytowane 27 Czerwca 2018 przez Paweł ole 1 Cytuj Link to postu
Polecane posty
Dołącz do dyskusji
Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.
Uwaga: Twój wpis zanim będzie widoczny, będzie wymagał zatwierdzenia moderatora.