Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MSSQL][PHP] Kilka update rekord po rekordzie
mnicg
post
Post #1





Grupa: Zarejestrowani
Postów: 1
Pomógł: 0
Dołączył: 2.12.2015

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 11:20