Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Insertion de lignes dans une table avec une seule colonne IDENTITY

Si vous avez une colonne qui est une IDENTITÉ, faites ceci

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

Si vous n'avez pas d'identité, pouvez-vous la définir ? C'est le meilleur moyen... et utilisez le SQL ci-dessus.

Sinon, vous souhaitez insérer une nouvelle ligne

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

Remarques :

  • Sous des charges élevées, la solution MAX peut échouer avec des doublons
  • SCOPE_IDENTITY est après le fait, pas avant
  • SCOPE_IDENTITY ne fonctionne qu'avec une colonne IDENTITY. Idem toute idiotie en utilisant IDENT_CURRENT
  • La clause de sortie remplace SCOPE_IDENTITY pour la solution MAX