Kłopot się zaczyna gdzie indziej - wpisywane wiersze pomiędzy tabelami mają
być powiązane wzajemnie kluczami z tabel między sobą (hierarchia
drzewiasta ).
Aby nie śmiecić bazy chciałem to zrobić w transakcji tnz.: jak wczytam cały
plik to kończę transakcję, jeśli wystąpi błąd danych to wycofuję całą
operację. Pliki nie są wielkie, więc zasobów dużo nie trzeba.
Próbowałem to zrobić tak:
1. zaczynam transakcję
2. dopisuję wiersz danych do TAB_1
3. pobieram ID dopisanego wiersza ID_TAB_1
4. dopisuje wiersz do TAB_2 z informacją o ID_TAB_1
itd. aż do ostatniej tabeli. Tabel jest 5
Po zakończeniu wczytywania kończę transakcję.
Problemem jest operacja 2 - po dopisaniu wiersza nie mogę pobrać ID_TAB_1
jak i kolejnych Identyfikatorów.
Mogę pobrać ID, ale po zakończeniu transakcji, ale nie w jej trakcie :(
Albo coś źle robię, albo czegoś nie wiem:(
Pytanie jest takie - Czy da się pobrać ID dopisane wiersza bez kończenia
transakcji i jak to zrobić?
Testowałem inne rozwiązania, ale są one okupione zdecydowanie większym
czasem potrzebnym na wczytanie takiego samego pliku. Przy jednym pliku bym
sobie darował, ale będzie ich więcej, więc czas wczytania niestety ma
znaczenie.
Pozdrawiam
/Jędrek
P.S. baza pracuje na MS SQL-Express 2005
> 3. pobieram ID dopisanego wiersza ID_TAB_1
W jaki sposób to robisz?
yamma
Witam
Zapis do bazy wykonuję przy pomocy procedury składowanej w bazie do której
przekazuję dane do zapisu.
Odczyt też przy pomocy procedury (zwykły SELECT z odpowiednim warunkiem)-
może tu jest mój błąd?
Z pewnych względów chciałbym pozostać przy StoredPoredure.
W trakcie zapisywanie podglądałem tabelę, ale wiersz mi się nie wyświetlał
dopuki nie zakończyłem tranzakcji.
Pozdrawiam
/Jędrek
Jaki to warunek?
> Z pewnych względów chciałbym pozostać przy StoredPoredure.
> W trakcie zapisywanie podglądałem tabelę, ale wiersz mi się nie wyświetlał
> dopuki nie zakończyłem tranzakcji.
Zmodyfikuj swoją procedurę przekazywaną by zwracała id dodanego rekordu -
wówczas nie będziesz musiał robić osobnego selekta, a id wyciągniesz np.
przez ScopeIdentity.
G.