J'ai ce code:
string insertSql =
"INSERT INTO aspnet_GameProfiles(UserId,GameId) VALUES(@UserId, @GameId)";
using (SqlConnection myConnection = new SqlConnection(myConnectionString))
{
myConnection.Open();
SqlCommand myCommand = new SqlCommand(insertSql, myConnection);
myCommand.Parameters.AddWithValue("@UserId", newUserId);
myCommand.Parameters.AddWithValue("@GameId", newGameId);
myCommand.ExecuteNonQuery();
myConnection.Close();
}
Lorsque j'insère dans cette table, j'ai une colonne de clé primaire auto_increment int appelée GamesProfileId
, comment puis-je obtenir la dernière insérée après cela afin que je puisse utiliser cet identifiant pour l'insérer dans une autre table?
c#
sql
sql-server
anthonypliu
la source
la source
OUTPUT INSERTED.ID
pourrait générer un problème en cas de déclenchement actif sur la tableVous pouvez créer une commande
CommandText
égale àet exécutez
int id = (int)command.ExecuteScalar
.Cet article MSDN vous donnera quelques techniques supplémentaires.
la source
Ce vil travail :)
la source
J'avais le même besoin et j'ai trouvé cette réponse.
Cela crée un enregistrement dans la table d'entreprise (comp), il récupère l'ID automatique créé sur la table d'entreprise et le dépose dans une table Staff (staff) afin que les 2 tables puissent être liées, BEAUCOUP d'employés à UNE entreprise. Cela fonctionne sur ma base de données SQL 2008, devrait fonctionner sur SQL 2005 et au-dessus.
============================
- Le ' @recID' est utilisé pour contenir le numéro d'identification généré automatiquement par l'entreprise que nous sommes sur le point de saisir
- La ligne ci-dessus est utilisée pour créer une table temporaire contenant le numéro d'identification généré automatiquement pour une utilisation ultérieure. Il n'a qu'un seul champ 'tempID' et son type INT est le même que '@recID' .
- Le ' OUTPUT inséré. La ligne ci-dessus est utilisée pour extraire des données de n'importe quel champ de l'enregistrement qu'il crée en ce moment. Ces données que nous voulons sont la numérotation automatique ID. Assurez-vous donc qu'il indique le nom de champ correct pour votre table, le mien est 'comp_id' . Ceci est ensuite déposé dans la table temporaire que nous avons créée précédemment.
- La ligne ci-dessus est utilisée pour rechercher la table temporaire que nous avons créée précédemment où l'ID dont nous avons besoin est enregistré. Puisqu'il n'y a qu'un seul enregistrement dans cette table temporaire, et un seul champ, il ne sélectionnera que le numéro d'identification dont vous avez besoin et le déposera dans ' @recID '. ' @recID ' a maintenant le numéro d'identification que vous voulez et vous pouvez l'utiliser comme vous le souhaitez, comme je l'ai utilisé ci-dessous.
- Alors voilà. Vous pouvez en fait saisir ce que vous voulez dans la ligne 'OUTPUT INSERT.WhatEverFieldNameYouWant' et créer les champs que vous voulez dans votre table temporaire et y accéder pour l'utiliser comme vous le souhaitez.
Je cherchais quelque chose comme ça depuis des lustres, avec cette ventilation détaillée, j'espère que cela aide.
la source
En SQL pur, l'instruction principale fonctionne comme:
Les crochets définissent le tableau simbs puis les colonnes En et ID, les crochets ronds définissent l'énumération des colonnes à lancer puis les valeurs des colonnes, dans mon cas une colonne et une valeur. Les apostrophes entourent une chaîne
Je vais vous expliquer ma démarche:
Ce n'est peut-être pas facile à comprendre, mais j'espère qu'il sera utile d'avoir une vue d'ensemble en utilisant le dernier identifiant inséré. Bien entendu, il existe des approches alternatives plus simples. Mais j'ai des raisons de garder les miennes. Les fonctions associées ne sont pas incluses, mais uniquement leurs noms et noms de paramètres.
J'utilise cette méthode pour l'intelligence artificielle médicale La méthode vérifie si la chaîne voulue existe dans la table centrale (1). Si la chaîne souhaitée n'est pas dans la table centrale "simbs", ou si les doublons sont autorisés, la chaîne souhaitée est ajoutée à la table centrale "simbs" (2). Le dernier identifiant inséré est utilisé pour créer la table associée (3).
la source
J'ai essayé ce qui précède mais cela n'a pas fonctionné, j'ai trouvé cette pensée, qui fonctionne très bien pour moi.
C'est moins de code et c'est facile à mettre.
J'espère que cela aide quelqu'un.
la source
Vous pouvez également utiliser un appel à SCOPE_IDENTITY dans SQL Server.
la source
la source
Il existe toutes sortes de façons d'obtenir le dernier ID inséré, mais le moyen le plus simple que j'ai trouvé consiste simplement à le récupérer à partir du TableAdapter dans le DataSet comme suit:
J'espère que cela t'aides ...
la source
Après avoir inséré une ligne, vous pouvez obtenir le dernier identifiant inséré sous la ligne de requête.
INSERT INTO aspnet_GameProfiles (UserId, GameId) VALUES (@UserId, @GameId); SELECT @@ IDENTITÉ
la source
Utilisez SELECT SCOPE_IDENTITY () dans la requête
la source
Après ça:
Exécutez ceci
Ça va marcher
la source
INSERT INTO aspnet_GameProfiles (UserId, GameId) VALUES (@UserId, @GameId) "; alors vous pouvez simplement accéder au dernier identifiant en ordonnant la table de manière desc.
SELECT TOP 1 UserId FROM aspnet_GameProfiles ORDER BY UserId DESC.
la source
la source