49 votes

Comment insérer un enregistrement et retourner le nouvellement créé ID à l'aide d'un seul SqlCommand?

Je suis à l'aide d'un objet SqlCommand pour insérer un enregistrement dans une table avec une clé primaire générée automatiquement. Comment puis-je écrire le texte de la commande afin que je reçois le nouvellement créé ID lorsque j'utilise le ExecuteScalar() la méthode?

74voto

Dave Markle Points 44637
INSERT INTO YourTable(val1, val2, val3 ...) 
VALUES(@val1, @val2, @val3...);
SELECT SCOPE_IDENTITY();

N'oubliez pas le point-virgule à la fin de chaque instruction.

25voto

Andy McCluggage Points 8583

Ajoutez la ligne suivante à la fin de la Requête Sql...

SELECT SCOPE_IDENTITY()

Et ensuite utiliser la méthode ExecuteScalar sur l'objet SqlCommand...

var rowCount = command.ExecuteScalar()

16voto

JoshBerke Points 34238
insert into Yourtable()  
values()  
SELECT SCOPE_IDENTITY()

J'ai juste couru un test et vérifier que les points-virgules sont en option à l'aide de SQL Server 2005 SP2, et .Net 3.5

5voto

Matt Points 410

Ajouter un paramètre de sortie pour la commande de l'objet, puis définissez la valeur de la nouvelle carte d'identité dans la procédure stockée.

Procédure Stockée:

@ID AS INT OUTPUT

[Insert Command]

SET @ID = SCOPE_IDENTITY()

.NET:

cmd.CommandText = "stored_procedure";

SqlParameter pID = new SqlParameter("ID", DBType.Int32, 4);

pID.Direction = ParameterDirection.Output;

cmd.ExecuteScalar();

int id = Convert.ToInt32(cmd.Parameters["ID"].Value.ToString());

2voto

Samiksha Points 2182

Immédiatement après votre insertion stmt, l'utilisation

SELECT CAST(scope_identity() AS bigint) ---- incase you have a return result as int64

Ce sera le retour de la colonne créée id/identité.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X