Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 11405|Odpowiedź: 0

[Napiwki] sql otrzymuje wartość klucza podstawowego po oczekiwaniu na INSERT

[Skopiuj link]
Opublikowano 05.05.2015 17:35:51 | | |

Funkcja pobierania wartości identyfikacyjnej w SQL SERVER 2000     
  W SQL Server 2000 kolumna tożsamości jest definiowana przez IDENTITY, a następujące elementy dotyczą uzyskania wartości tożsamości ostatniego wstawionego rekordu   
   
  Przykładowa ilustracja funkcji wyłączonej     
   
          W SQL Serverze możesz użyć SCOPE_IDENTITY(), @@IDENTITY, IDENT_CURRENT(), aby uzyskać wartość ostatniego wstawionego rekordu, a różnica między nimi jest następująca:   
  SCOPE_IDENTITY() zwraca ostatnią wartość IDENTITY wstawioną w kolumnie IDENTITY w tym samym zakresie. Zakres to moduł – procedury przechowywane, wyzwalacze, funkcje   
   
  Liczby lub partie. Dlatego jeśli dwa stwierdzenia są w tej samej procedurze przechowywanej, funkcji lub partii, są w tym samym zakresie.   
  @@IDENTITY Zwraca ostatnią wartość identyfikacyjną wygenerowaną we wszystkich tabelach w bieżącej sesji   
  IDENT_CURRENT() zwraca ostatnią wartość identyfikacyjną wygenerowaną dla określonej tabeli w dowolnej sesji i dowolnym zakresie   
  Oto przykład, który ilustruje ich różnice     
   
  -- a) Przykładowy kod     
  --   ===========================================   
  -- Utworzenie tabeli testowej   
  --   ===========================================   
  UŻYJ tempdb   
  IDŹ   
   
  CREATE TABLE t1(id int IDENTITY, col int)   
  WSTAW t1 WYBIERZ 1   
  UNION ALL SELECT 2   
  CREATE TABLE t2(id int IDENTITY,col int)   
  IDŹ   
   
  UTWÓRZ TR_insert_t2 WYZWALACZA NA T2   
  DO INSERTU   
  AS   
          WSTAW T1 SELECT 3   
  IDŹ     
   
  --   ===========================================   
  -- Przetestować trzy funkcje: 1   
  --   ===========================================   
  WSTAW WARTOŚCI T2(1)   
  WYBIERZ [SCOPE_IDENTITY()]=SCOPE_IDENTITY(),   
          [@@IDENTITY]=@@IDENTITY,   
          [IDENT_CURRENT() Dla t1]=IDENT_CURRENT(N't1'),   
          [IDENT_CURRENT() Dla t2]=IDENT_CURRENT(N't2')   
   
  /*--Wynik   
  SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() Dla t1 IDENT_CURRENT() Dla t2                                         
  ------------------   ------------   --------------------------   -----------------------   
  1                                     3                         3                                                     1   
   
  (Liczba wierszy objętych zmianą wynosi 1 wiersz)   
  --*/   
  IDŹ   
   
  --   ===========================================   
  -- Przetestować trzy funkcje: 2   
  --   ===========================================   
  WSTAW WARTOŚCI T1(10)   
  WYBIERZ [SCOPE_IDENTITY()]=SCOPE_IDENTITY(),   
          [@@IDENTITY]=@@IDENTITY,   
          [IDENT_CURRENT() Dla t1]=IDENT_CURRENT(N't1'),   
          [IDENT_CURRENT() Dla t2]=IDENT_CURRENT(N't2')   
   
  /*--Wynik   
  SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() Dla t1 IDENT_CURRENT() Dla t2                                         
  ------------------   ------------   --------------------------   -----------------------   
  4                                     4                         4                                                     1   
   
  (Liczba wierszy objętych zmianą wynosi 1 wiersz)   
  --*/   
  IDŹ   
   
  --   ===========================================   
  -- Przetestować trzy funkcje: 3   
  -- ** Otwórz nowe połączenie i wykonaj następujący kod **   
  --   ===========================================   
  WYBIERZ [SCOPE_IDENTITY()]=SCOPE_IDENTITY(),   
          [@@IDENTITY]=@@IDENTITY,   
          [IDENT_CURRENT() Dla t1]=IDENT_CURRENT(N't1'),   
          [IDENT_CURRENT() Dla t2]=IDENT_CURRENT(N't2')   
   
  /*--Wynik   
  SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() Dla t1 IDENT_CURRENT() Dla t2                                         
  ------------------   ------------   --------------------------   -----------------------   
  NULL NULL 4&n     
   
  --===========================================   
  -- Usuń środowisko testowe   
  --   ===========================================   
  TABELA DROP t1,t2     
   
  -- b) Opis wyniku kodu     
  Jak widać w powyższym kodzie:   
  IDENT_CURRENT() zawsze zwraca ostatnią zidentyfikowaną wartość wprowadzoną w podanej tabeli   
  @@IDENTITY Zwraca wartość tożsamości bieżącej sesji, niezależnie od tego, czy jest w tym samym zakresie, czy nie, w testach 1 i 2 widać, że zwraca wartość tożsamości wstawionego rekordu w wyzwalaczu, oraz w   
   
  W Teście 3 zwraca się NULL, ponieważ w bieżącej sesji nie ma zapisu wstawienia   
  SCOPE_IDENTITY() zwraca wartość identyfikacyjną tego samego zakresu bieżącej sesji, więc w teście 1, 2 zwraca wartość niezamierzoną przez wyzwalacz, a w teście 3, ponieważ bieżąca sesja nie jest interpolowana   
   
  record, więc zwraca NULL





Poprzedni:Dlaczego wszyscy poszli na święto Święta Pracy?
Następny:Jaka jest różnica między SCOPE_IDENTITY() napisanym przed a po w t-sql?
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com