2009-12-30 5 views
4

Je suis un développeur de C++ application de bureau depuis longtemps à SQL. J'ai besoin d'insérer dans une table avec un champ d'auto-incrémentation, et que cette instruction sql renvoie la nouvelle valeur pour le champ autoincrement.SQL INSERT INTO retour champ auto-incrémenté

Quelque chose comme:

INSERT INTO Entrys ('Name','Description') 
VALUES ('abc','xyz') 
SELECT Entrys.EntryID WHERE EntryID=[THE ONE JUST INSERTED!] 

Désolé d'être un noob.

+2

quelle base de données utilisez-vous? SQL Server, MySQL, etc? –

Répondre

3

select SCOPE_IDENTITY

insert into table values ('string value');select scope_identity() 

Détails here

+1

Est-ce de: http://www.velocityreviews.com/forums/t303448-return-identity-after-sql-insert.html? Si oui, vous devriez fournir un lien. –

2

En supposant que vous utilisez SQL Server, vous pouvez utiliser scope_identity pour revenir « la dernière valeur d'identité insérée dans une colonne d'identité dans la même portée. A scope est un module: une procédure stockée, un trigger, une fonction ou un batch, par conséquent, deux instructions sont dans la même portée si elles sont dans la même procédure stockée, fonction ou batch. "

INSERT INTO Entrys ('Name','Description') VALUES ('abc','xyz'); 
SELECT SCOPE_IDENTITY() 
3

MySQL vous pouvez utiliser LAST_INSERT_ID()

2

Dans SQL Server, vous pouvez également utiliser la clause de sortie sur votre instruction INSERT:

INSERT INTO Entrys('Name', 'Description') 
OUTPUT Inserted.EntryID 
VALUES ('abc','xyz') 

Ceci affichera la valeur de champ d'identité nouvellement créé.

0

Comme @marc_s dit pour SQL Server, PostgreSQL, vous pouvez obtenir le même comportement avec:

INSERT INTO Entrys ('Name','Description') 
VALUES ('abc','xyz') 
RETURNING EntryID; 

RETOURNER est également très utile lorsque vous insérez plusieurs tuples et que vous voulez tous les ID générés pour chaque des rangées.

Questions connexes