dbo.A
|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 |

  1. CREATE TRIGGER [dbo].[test] ON dbo.B
  2. AFTER INSERT
  3. AS
  4. BEGIN
  5.  
  6. UPDATE B SET B.a = A.id
  7. FROM B JOIN A
  8. ON A.x = B.x
  9. WHERE B.a=0 AND B.s=1 AND A.k=0
  10.  
  11. UPDATE B SET B.s=6
  12. FROM B JOIN A
  13. ON A.x = B.x
  14. WHERE B.a > 0 AND A.k=0
  15.  
  16. UPDATE A SET A.k=1
  17. FROM A JOIN B
  18. ON B.a=A.id
  19. WHERE B.s=6
  20.  
  21. UPDATE B SET B.s=7
  22. FROM B JOIN A
  23. ON A.x = B.x
  24. WHERE B.a=0 AND B.s=1 AND A.k=1
  25.  
  26. UPDATE B SET B.s=2
  27. FROM B JOIN A
  28. ON A.x != B.x
  29. WHERE B.a=0 AND B.s=1
  30.  
  31. 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 questionmark.gif

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.