sobota, 19 czerwca 2010

Identity w SQL Server

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