Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Einfügen von Zeilen in eine Tabelle mit nur einer IDENTITY-Spalte

Wenn Sie eine Spalte haben, die eine IDENTITÄT ist, tun Sie dies einfach

INSERT MyTable DEFAULT VALUES;  --allows no column list. The default will be the IDENTITY
SELECT SCOPE_IDENTITY();

Wenn Sie keine Identität haben, können Sie sie dann festlegen? Dies ist der beste Weg ... und verwenden Sie das obige SQL.

Wenn nicht, möchten Sie eine neue Zeile einfügen

INSERT MyTable (admidid)
OUTPUT INSERTED.admidid --returns result to caller
SELECT ISNULL(MAX(admidid), 0) + 1 FROM MyTable

Hinweise:

  • Unter hoher Last kann die MAX-Lösung mit Duplikaten fehlschlagen
  • SCOPE_IDENTITY ist nach nämlich nicht vorher
  • SCOPE_IDENTITY funktioniert nur mit einer IDENTITY-Spalte. Dito jede Idiotie mit IDENT_CURRENT
  • Die Ausgabeklausel ersetzt SCOPE_IDENTITY für die MAX-Lösung