|id | x | k |
-------------
|5 | 2 | 0 |
|6 | 3 | 1 |
|7 | 2 | 0 |
dbo.B
|id | x | s | a |
-----------------
| 1 | 2 | 3 | 5 |
| 2 | 3 | 6 | 6 |
| 3 | 3 | 7 | 0 |
| 4 | 3 | 7 | 0 |
CREATE TRIGGER [dbo].[test] ON dbo.B AFTER INSERT AS BEGIN UPDATE B SET B.a = A.id FROM B JOIN A ON A.x = B.x WHERE B.a=0 AND B.s=1 AND A.k=0 UPDATE B SET B.s=6 FROM B JOIN A ON A.x = B.x WHERE B.a > 0 AND A.k=0 UPDATE A SET A.k=1 FROM A JOIN B ON B.a=A.id WHERE B.s=6 UPDATE B SET B.s=7 FROM B JOIN A ON A.x = B.x WHERE B.a=0 AND B.s=1 AND A.k=1 UPDATE B SET B.s=2 FROM B JOIN A ON A.x != B.x WHERE B.a=0 AND B.s=1 END
Witam, mam 2 tabele A i B. Do tabeli B trafiaja dane za pomocą formularza, gdzie wybieramy x i na jego podstawie przydzielane jest id z tabeli A. Chodzi o to aby wszystko odbywało się automatycznie. Napisałem takiego triggera jak widać powyżej i mam problem, gdy rekord o id=2 w tabeli B zmieni s=6 na np. s=4 i w tabeli A pole k=1 zostanie zmienie na k=0 to w takim przypadku trigger zaktualizuje tabele B i dwa ostatnie rekordy zmienią s=7 na s=6 oraz do pola a zostanie przypisane id=11 (czyli najpierw przejdzie update pierwszy, później drugi itp) i pole k w tabeli A które pełni funkcję ograniczenia w tym momencie nie działa. Pytanie, czy da sie jakoś zrobić tak aby te pięć update przeszło rekord po rekordzie, czyli, że rekord o id=3 tylko zmieni s=6 i a=11 w tabeli B oraz w tabeli A, k=1 a rekord o id=4 zostanie nieruszony i będzie czekał na swoją kolej

Podsumowując problem polega na tym, że pierwszy update wykonuje się po całej tabeli, następnie kolejny update przechodzi po całej tabeli .... a aby działało tak jak bym to chciał powinny te wszystkie update wykonywać się rekord po rekordzie. Proszę zwrócić uwagę że jest to MSSQL nie MySQL.