Ich habe diesen 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();
}
Wenn ich in diese Tabelle einfüge, habe ich eine auto_increment int-Primärschlüsselspalte mit dem Namen GamesProfileId
. Wie kann ich die zuletzt eingefügte Spalte danach abrufen , damit ich diese ID zum Einfügen in eine andere Tabelle verwenden kann?
c#
sql
sql-server
anthonypliu
quelle
quelle
OUTPUT INSERTED.ID
könnte im Falle eines aktiven Auslösers auf dem Tisch ein Problem erzeugenSie können einen Befehl mit
CommandText
gleich erstellenund ausführen
int id = (int)command.ExecuteScalar
.Dieser MSDN-Artikel enthält einige zusätzliche Techniken.
quelle
Diese üble Arbeit :)
quelle
Ich hatte das gleiche Bedürfnis und fand diese Antwort ..
Dadurch wird ein Datensatz in der Firmentabelle (comp) erstellt. Dabei wird die in der Firmentabelle erstellte automatische ID erfasst und in eine Staff-Tabelle (staff) abgelegt, sodass die beiden Tabellen mit VIELEN Mitarbeitern mit EINER Firma verknüpft werden können. Es funktioniert auf meiner SQL 2008-Datenbank, sollte auf SQL 2005 und höher funktionieren.
===========================
- Die ' @recID' wird verwendet, um die automatisch generierte ID-Nummer des Unternehmens zu speichern, die wir abrufen möchten
- In der obigen Zeile wird eine temporäre Tabelle erstellt, in der die automatisch generierte ID-Nummer für die spätere Verwendung gespeichert ist. Es hat nur ein Feld 'tempID' und sein Typ INT ist der gleiche wie der von '@recID' .
- Der ' OUTPUT eingefügt. Die obige Zeile wird verwendet, um Daten aus einem beliebigen Feld in dem Datensatz abzurufen, den sie gerade erstellt. Diese Daten, die wir wollen, sind die ID-Autonummer. Stellen Sie also sicher, dass der richtige Feldname für Ihre Tabelle angegeben ist. Mein Name lautet 'comp_id' . Dies wird dann in die zuvor erstellte temporäre Tabelle verschoben.
- In der obigen Zeile wird die zuvor erstellte temporäre Tabelle durchsucht, in der die benötigte ID gespeichert ist. Da diese temporäre Tabelle nur einen Datensatz und nur ein Feld enthält, wird nur die von Ihnen benötigte ID-Nummer ausgewählt und in ' @recID ' abgelegt . ' @recID ' hat jetzt die gewünschte ID-Nummer und Sie können sie so verwenden, wie Sie es möchten, wie ich sie unten verwendet habe.
-- Hier bitteschön. Sie können in der Zeile 'OUTPUT insert.WhatEverFieldNameYouWant' nach Belieben greifen, die gewünschten Felder in Ihrer temporären Tabelle erstellen und darauf zugreifen, um zu verwenden, wie immer Sie möchten.
Ich habe ewig nach so etwas gesucht, mit dieser detaillierten Aufschlüsselung hoffe ich, dass dies hilft.
quelle
In reinem SQL lautet die Hauptanweisung wie folgt:
Eckige Klammern definieren die Tabellensimulationen und dann die Spalten En und ID, runde Klammern definieren die Aufzählung der zu initiierenden Spalten und dann die Werte für die Spalten, in meinem Fall eine Spalte und einen Wert. Die Apostrophe umschließen eine Schnur
Ich werde Ihnen meinen Ansatz erklären:
Es ist vielleicht nicht leicht zu verstehen, aber ich hoffe, dass es nützlich ist, mit der zuletzt eingefügten ID einen Überblick zu bekommen. Natürlich gibt es alternative einfachere Ansätze. Aber ich habe Gründe, meine zu behalten. Zugehörige Funktionen sind nicht enthalten, nur deren Namen und Parameternamen.
Ich verwende diese Methode für die medizinische künstliche Intelligenz. Die Methode prüft, ob die gewünschte Zeichenfolge in der zentralen Tabelle (1) vorhanden ist. Befindet sich die gewünschte Zeichenfolge nicht in der zentralen Tabelle "simbs" oder sind Duplikate zulässig, wird die gewünschte Zeichenfolge zur zentralen Tabelle "simbs" (2) hinzugefügt. Die zuletzt eingefügte ID wird verwendet, um die zugehörige Tabelle (3) zu erstellen.
quelle
Ich habe das oben genannte versucht, aber sie haben nicht funktioniert. Ich fand diesen Gedanken, der für mich in Ordnung ist.
Es ist weniger Code und ich einfach einzufügen.
Hoffe das hilft jemandem.
quelle
Sie können SCOPE_IDENTITY auch in SQL Server aufrufen.
quelle
quelle
Es gibt viele Möglichkeiten, die zuletzt eingefügte ID abzurufen. Der einfachste Weg, den ich gefunden habe, besteht darin, sie einfach wie folgt aus dem TableAdapter im DataSet abzurufen:
Hoffe das hilft ...
quelle
Nach dem Einfügen einer Zeile können Sie die zuletzt eingefügte ID unter der Abfragezeile abrufen.
INSERT INTO aspnet_GameProfiles (UserId, GameId) VALUES (@UserId, @GameId); SELECT @@ IDENTITY
quelle
Verwenden Sie in der Abfrage SELECT SCOPE_IDENTITY ()
quelle
Danach:
Führen Sie dies aus
Es wird klappen
quelle
INSERT INTO aspnet_GameProfiles (UserId, GameId) VALUES (@UserId, @GameId) "; dann können Sie einfach auf die letzte ID zugreifen, indem Sie die Tabelle in absteigender Reihenfolge bestellen.
SELECT TOP 1 UserId FROM aspnet_GameProfiles ORDER BY UserId DESC.
quelle
quelle