sql >> Databasteknik >  >> RDS >> Sqlserver

Infogar rader i en tabell med endast en IDENTITY-kolumn

Om du har en kolumn som är en IDENTITET gör du bara detta

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

Om du inte har identitet, kan du då ställa in den? Detta är det bästa sättet.. och använd SQL-koden ovan.

Om inte, vill du infoga en ny rad

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

Anmärkningar:

  • Under hög belastning kan MAX-lösningen misslyckas med dubbletter
  • SCOPE_IDENTITY är efter faktum, inte tidigare
  • SCOPE_IDENTITY fungerar bara med en IDENTITY-kolumn. Dito all idioti som använder IDENT_CURRENT
  • Utdatasatsen ersätter SCOPE_IDENTITY för MAX-lösningen


  1. Multi-Cloud Full Databas Cluster Failover-alternativ för MariaDB Cluster

  2. Hur man lägger in mer än 1000 värden i en Oracle IN-klausul

  3. MariaDB JSON_LOOSE() Förklarad

  4. Oracle TNS-namn visas inte när ny anslutning läggs till SQL Developer