Wykrywanie unikalnych update na bazie

0

pracuję na MSSQL,
mam trigger, który bada zmiany na jednej z tabel. Chcę nim wychwycić nadpisywanie tabeli danymi unikalnymi i zapisać te unikalne dane do innej tabeli w celu wyraportowania tych zmian. Chodzi o to, że aplikacja, która działa na tabeli za każdym razem nadpisuje dziesiątki wierszy, przy czym tylko parę z tych wierszy jest nadpisywana nowymi danymi, cala reszta nadpisywana jest danymi już istniejącymi, czyli:
1 | jan | kowalski | szczecin | 25nadpisywane jest:
1 | jan | kowalski | szczecin | 25 i to nawet kilka razy i dotyczy to na raz wielu wierszy, ale w pewnym momencie robi się update:
1 | jan | kowalski | szczecin | 99

Problem jest taki, że jedno kliknięcie w aplikacji wywołuje całą lawinę takich nadpisań, czasem po 10 w jednym commicie, a samych commitów też może być klika na jedną akcję wywołaną w aplikacji. Kolumn także jest bardzo dużo i chciałbym mieć możliwość zdecydowania samemu, po zmianie której kolumny uznajemy, że wpis jest unikalny, tj. w przypadku zmiany 'szczecina' na 'warszawę' uznajemy, że nic nie zostało zmienione i taki zapis nie insertuje mi się do tabeli raportów.

Za wszelkie pomysły na to - dziękuję.

0

Ale to nadpisuje tylko jedno pole, czy może nadpisać dowolne? Bo według twojego przykładu zmienia się tylko wartość liczbowa

0

a problem w? Jak masz jakieś unikalne ID, które jest też zmieniane w update to porównujesz w wyzwalaczu nowe dane ze starymi i jak jest różnica to insert do innej tabeli

0

Problem w tym, że w jednym wykrytym przez trigger UPDATE tabela INSERTED zawiera bardzo dużo wierszy, np. 200

1 | jan | kowalski | szczecin | 25
2 | adam | nowak | gdańsk | 25
3 | ala | kowalska | lądek zdrój | 25
...

tabela, na której jest trigger ma tych wierszy np 2000

do tego samych UPDATE może być np. 20, każdy po kilkaset wierszy w INSERTED, a tylko w trzecim i siedemnastym UPDATE zachodzą zmiany i tylko w 25. wierszu dla update nr 3 i 37. wierszu dla update nr 17 (oczywiście mówimy 0 wierszach z tabeli INSERTED, że na tych wierszach zapisy są różne niż na istniejącej tabeli w bazie, która bada trigger). Jednak faktycznie mamy unikalne ID, ale nie mogę przeskoczyć tematu, że INSERTED ma 200 wierszy i jak jest teraz porównać z tabelą co ma 2000 wierszy. Najcześciej co bym nie zrobił dostaję błąd sql, że zapytanie zwraca 'more then 1 value'. Nie wiem, jak porównywać wiele wierszy do wielu wierzy. Cała reszta, czyli (20 update x 200 wierszy) - 2 poszukiwane zmiany jest niezmienna i bezsensownie przepisywana w te same miejsca tymi samymi wartościami.

0
JanMarian napisał(a):

Najcześciej co bym nie zrobił dostaję błąd sql, że zapytanie zwraca 'more then 1 value'.

Zamień = na IN

1 użytkowników online, w tym zalogowanych: 0, gości: 1