Często zdarza się, że w tabeli klucz główny to pole typu int z autoinkrementacją (identity w SQL Server). Wstawiając nowy wiersz do tabeli nie musimy się martwić o problem znajdowania ostatnio dodawanego identyfikatora i modyfikowaniu go. Z drugiej strony należy też go w miarę potrzeby wyciągnąć jeżeli jest potrzebny przy dodawaniu danych do kilku tabel. Przykładowo weźmy dwie tabele: Osoba i Adres. W tabeli osoba mamy klucz obcy wskazujący na adres znajdujący się w tabeli Adres. Podczas tworzenia nowego użytkownika, najczęściej najpierw tworzymy rekord w tabeli adres a później mając już Id Adresu wstawiamy dane do tabeli Osoba.
W przypadku tabeli z autoinkrementacją, aby pobrać ostatnio tworzony numer autoinkrementacji można skorzystać z kilku dostępnych sposobów w SQL Serwerze:
1. @@Identity
Czyli stosując zapis SELECT @@Identity otrzymamy ostatnio wygenerowany identyfikator niezależnie od tabeli w której został utworzony.
2. Scope_Identity()
Czyli stosując zapytanie SELECT SCOPE_IDENTITY() otrzymujemy identyfikator, który w jawny sposób utworzyliśmy. Nie otrzymamy takich wartości które dla przykładu zostały utworzone za pomocą triggera czy też funkcji.
3. Ident_Current
Stosując zapytanie SELECT Ident_Current('Nazwa_tabeli') otrzymamy identyfikator utworzony jako ostatni dla danej tabeli. Jest to chyba najczęściej wykorzystywana funkcja w przypadku SQL Servera z tabelami w których wykorzystywana jest autoinkrementacja.
Innym sposobem jest stworzenie własnego systemu autoinkrementacji. Dla przykładu można stworzyć procedurę która tworzy wiersz w tabeli pobierając potrzebne parametry od użytkownika. W środku procedury można obsłużyć np. pobranie maksymalnego obecnie ID i dodać np 1 do niego.
Sposobów jest oczywiście wiele i każdy ma swoje wady i zalety.
Brak komentarzy:
Prześlij komentarz