Dieser Artikel ist ein Spiegelartikel der maschinellen Übersetzung, bitte klicken Sie hier, um zum Originalartikel zu springen.

Ansehen: 11405|Antwort: 0

[Tipps] sql erhält den Primärschlüsselwert, nachdem auf INSERT gewartet wurde

[Link kopieren]
Veröffentlicht am 05.05.2015 17:35:51 | | |

Identifikationswert-Abruffunktion in SQL SERVER 2000     
  In SQL Server 2000 wird die Identitätsspalte durch IDENTITY definiert, und das Folgende bezieht sich auf das Erlangen des Identitätswerts des zuletzt eingefügten Datensatzes   
   
  Ein Beispiel für die Funktion von off     
   
          In SQL Server können Sie SCOPE_IDENTITY(), @@IDENTITY, IDENT_CURRENT() verwenden, um den Wert des zuletzt eingefügten Datensatzes zu erhalten, und der Unterschied zwischen ihnen ist:   
  SCOPE_IDENTITY() gibt den letzten IDENTITY-Wert zurück, der in der Spalte IDENTITY im selben Scope eingefügt wurde. Ein Scope ist ein Modul – gespeicherte Prozeduren, Trigger, Funktionen   
   
  Zahlen oder Chargen. Wenn sich also zwei Anweisungen im selben gespeicherten Verfahren, Funktion oder Batch befinden, befinden sie sich im selben Scope.   
  @@IDENTITY Gibt den zuletzt in allen Tabellen der aktuellen Sitzung generierten Identifikationswert zurück   
  IDENT_CURRENT() gibt den zuletzt für die angegebenen Tabelle in jeder Sitzung und jedem Scope erzeugten Identifikationswert zurück   
  Hier ein Beispiel, um ihre Unterschiede zu veranschaulichen     
   
  -- a) Beispielcode     
  --   ===========================================   
  -- Erstellen Sie eine Testtabelle   
  --   ===========================================   
  USE tempdb   
  LOS   
   
  CREATE TABLE t1(id int IDENTITY,col int)   
  T1 EINFÜGEN SELECT 1   
  UNION ALLE AUSWÄHLEN 2   
  CREATE TABLE t2(id int IDENTITY,col int)   
  LOS   
   
  TRIGGER TR_insert_t2 AUF T2 ERSTELLEN   
  FÜR INSERT   
  AS   
          T1 EINFÜGEN SELECT 3   
  LOS     
   
  --   ===========================================   
  -- Drei Funktionen testen: 1   
  --   ===========================================   
  T2-WERTE EINFÜGEN(1)   
  SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(),   
          [@@IDENTITY]=@@IDENTITY,   
          [IDENT_CURRENT() Für t1]=IDENT_CURRENT(N't1'),   
          [IDENT_CURRENT() Für t2]=IDENT_CURRENT(N't2')   
   
  /*--Ergebnis   
  SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() Für t1 IDENT_CURRENT() Für t2                                         
  ------------------   ------------   --------------------------   -----------------------   
  1                                     3                         3                                                     1   
   
  (Die Anzahl der betroffenen Zeilen beträgt 1 Reihe)   
  --*/   
  LOS   
   
  --   ===========================================   
  -- Drei Funktionen testen: 2   
  --   ===========================================   
  T1-WERTE EINFÜGEN(10)   
  SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(),   
          [@@IDENTITY]=@@IDENTITY,   
          [IDENT_CURRENT() Für t1]=IDENT_CURRENT(N't1'),   
          [IDENT_CURRENT() Für t2]=IDENT_CURRENT(N't2')   
   
  /*--Ergebnis   
  SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() Für t1 IDENT_CURRENT() Für t2                                         
  ------------------   ------------   --------------------------   -----------------------   
  4                                     4                         4                                                     1   
   
  (Die Anzahl der betroffenen Zeilen beträgt 1 Reihe)   
  --*/   
  LOS   
   
  --   ===========================================   
  -- Drei Funktionen testen: 3   
  -- ** Eröffne eine neue Verbindung und führe folgenden Code aus **   
  --   ===========================================   
  SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(),   
          [@@IDENTITY]=@@IDENTITY,   
          [IDENT_CURRENT() Für t1]=IDENT_CURRENT(N't1'),   
          [IDENT_CURRENT() Für t2]=IDENT_CURRENT(N't2')   
   
  /*--Ergebnis   
  SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() Für t1 IDENT_CURRENT() Für t2                                         
  ------------------   ------------   --------------------------   -----------------------   
  NULL NULL 4 &n     
   
  --===========================================   
  -- Lösche die Testumgebung   
  --   ===========================================   
  DROPP-TABELLE T1,T2     
   
  -- b) Codeergebnisbeschreibung     
  Wie Sie aus dem obigen Code sehen können:   
  IDENT_CURRENT() gibt immer den zuletzt identifizierten Wert zurück, der in der angegebenen Tabelle eingefügt ist   
  @@IDENTITY Gibt in Tests 1 und 2 den Identitätswert der aktuellen Sitzung zurück, egal ob im gleichen Umfang oder nicht, in Tests 1 und 2 ist zu erkennen, dass der Identitätswert des eingefügten Datensatzes im Trigger zurückgegeben wird, und in   
   
  In Test 3 wird NULL zurückgegeben, weil es in der aktuellen Sitzung keinen Einfügungseintrag gibt   
  SCOPE_IDENTITY() gibt den Identifikationswert desselben Umfangs der aktuellen Sitzung zurück, sodass in Test 1 und 2 der Wert zurückgegeben wird, der vom Trigger nicht beeinflusst wird, und in Test 3, weil die aktuelle Sitzung nicht interpoliert ist   
   
  Datensatz, also gibt es NULL zurück





Vorhergehend:Warum sind alle zum Maifeiertag gegangen?
Nächster:Was ist der Unterschied zwischen SCOPE_IDENTITY(), das vor und danach in T-SQL geschrieben wird?
Verzichtserklärung:
Alle von Code Farmer Network veröffentlichten Software, Programmiermaterialien oder Artikel dienen ausschließlich Lern- und Forschungszwecken; Die oben genannten Inhalte dürfen nicht für kommerzielle oder illegale Zwecke verwendet werden, andernfalls tragen die Nutzer alle Konsequenzen. Die Informationen auf dieser Seite stammen aus dem Internet, und Urheberrechtsstreitigkeiten haben nichts mit dieser Seite zu tun. Sie müssen die oben genannten Inhalte innerhalb von 24 Stunden nach dem Download vollständig von Ihrem Computer löschen. Wenn Ihnen das Programm gefällt, unterstützen Sie bitte echte Software, kaufen Sie die Registrierung und erhalten Sie bessere echte Dienstleistungen. Falls es eine Verletzung gibt, kontaktieren Sie uns bitte per E-Mail.

Mail To:help@itsvse.com