sql >> Databáze >  >> RDS >> Sqlserver

Vkládání řádků do tabulky pouze s jedním sloupcem IDENTITY

Pokud máte jeden sloupec IDENTITY, udělejte to

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

Pokud identitu nemáte, můžete ji nastavit? Toto je nejlepší způsob... a použijte výše uvedený SQL.

Pokud ne, chcete vložit nový řádek

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

Poznámky:

  • Při vysokém zatížení může řešení MAX selhat s duplikáty
  • SCOPE_IDENTITY je po skutečnost, ne dříve
  • SCOPE_IDENTITY funguje pouze se sloupcem IDENTITY. Stejně jako jakákoli idiocie pomocí IDENT_CURRENT
  • Výstupní klauzule nahrazuje SCOPE_IDENTITY pro řešení MAX


  1. Co může plán dotazů prozradit?

  2. Nevytvářejte jen slepě ty chybějící indexy!

  3. Únik ze zástupných karet MySQL

  4. jak vybrat sudé záznamy z tabulky v oracle?