Mam ten kod:
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();
}
Kiedy wstawiam do tej tabeli, mam kolumnę klucza podstawowego auto_increment int o nazwie GamesProfileId
, jak mogę uzyskać ostatnio wstawioną kolumnę po tym, aby móc użyć tego identyfikatora do wstawienia do innej tabeli?
c#
sql
sql-server
anthonypliu
źródło
źródło
OUTPUT INSERTED.ID
może generować problem w przypadku aktywnego wyzwalacza na stoleMożesz utworzyć polecenie z
CommandText
równościąi wykonaj
int id = (int)command.ExecuteScalar
.Ten artykuł MSDN zawiera dodatkowe techniki.
źródło
Ta zła praca :)
źródło
Miałem taką samą potrzebę i znalazłem tę odpowiedź.
Spowoduje to utworzenie rekordu w tabeli firmy (komp), pobranie automatycznego identyfikatora utworzonego na stole firmowym i umieszczenie go w tabeli personelu (personel), aby można było połączyć 2 tabele, WIELU pracowników do JEDNEJ firmy. Działa na mojej bazie danych SQL 2008, powinien działać na SQL 2005 i nowszych.
===========================
- „ @recID” jest używany do przechowywania automatycznie wygenerowanego numeru identyfikacyjnego firmy, który zamierzamy pobrać
- Powyższy wiersz służy do tworzenia tabeli tymczasowej do przechowywania automatycznie generowanego numeru identyfikacyjnego do późniejszego wykorzystania. Ma tylko jedno pole „tempID”, a jego typ INT jest taki sam jak „@recID” .
- Wstawiono „ WYJŚCIE ” . 'powyżej jest używana do pobierania danych z dowolnego pola w rekordzie, który właśnie tworzy. Te potrzebne nam dane to autonumerowanie identyfikatora. Więc upewnij się, że zawiera poprawną nazwę pola dla twojej tabeli, moja to „comp_id” . To jest następnie upuszczane do tabeli tymczasowej, którą utworzyliśmy wcześniej.
- Powyższa linia służy do przeszukiwania utworzonej wcześniej tabeli tymczasowej, w której zapisany jest potrzebny nam identyfikator. Ponieważ w tej tabeli tymczasowej jest tylko jeden rekord i tylko jedno pole, wybierze tylko potrzebny numer identyfikacyjny i upuści go w „ @recID ”. „ @recID ” ma teraz żądany numer identyfikacyjny i możesz go używać tak, jak chcesz, tak jak ja użyłem go poniżej.
- Więc proszę. Możesz faktycznie pobrać to, co chcesz, w wierszu „OUTPUT insert.WhatEverFieldNameYouWant” i utworzyć pola, które chcesz w tabeli tymczasowej, i uzyskać do nich dostęp, aby używać, jak chcesz.
Szukałem czegoś takiego od wieków, z tym szczegółowym podziałem, mam nadzieję, że to pomoże.
źródło
W czystym SQL główne instrukcje kools, takie jak:
Nawiasy kwadratowe definiują simbs tabeli, a następnie kolumny En i ID, nawiasy okrągłe określają wyliczenie kolumn, które mają zostać zainicjowane, a następnie wartości dla kolumn, w moim przypadku jedna kolumna i jedna wartość. Apostrofy zawierają ciąg
Wytłumaczę Ci moje podejście:
Może to nie być łatwe do zrozumienia, ale mam nadzieję, że przydatne będzie uzyskanie szerszego obrazu sytuacji przy użyciu ostatnio wstawionego identyfikatora. Oczywiście istnieją alternatywne, łatwiejsze podejścia. Ale mam powody, by zachować swoje. Funkcje skojarzone nie są uwzględniane, a jedynie ich nazwy i nazwy parametrów.
Używam tej metody do sztucznej inteligencji medycznej. Metoda sprawdza, czy poszukiwany ciąg istnieje w tabeli centralnej (1). Jeśli poszukiwany ciąg nie znajduje się w tabeli centralnej „simbs” lub jeśli dozwolone są duplikaty, to poszukiwany ciąg jest dodawany do tabeli centralnej „simbs” (2). Ostatni wpisany identyfikator jest używany do tworzenia powiązanej tabeli (3).
źródło
Wypróbowałem powyższe, ale nie zadziałały, znalazłem tę myśl, która działa dobrze dla mnie.
Jest mniej kodu i łatwo go wprowadzić.
Mam nadzieję, że to komuś pomoże.
źródło
Możesz również użyć wywołania SCOPE_IDENTITY w SQL Server.
źródło
źródło
Istnieje wiele sposobów uzyskania ostatniego wstawionego identyfikatora, ale najłatwiejszym sposobem, jaki znalazłem, jest po prostu pobranie go z TableAdapter w DataSet w następujący sposób:
Mam nadzieję że to pomoże ...
źródło
Po wstawieniu dowolnego wiersza możesz uzyskać ostatnio wstawiony identyfikator, znajdując się poniżej linii zapytania.
INSERT INTO aspnet_GameProfiles (UserId, GameId) VALUES (@UserId, @GameId); WYBIERZ @@ TOŻSAMOŚĆ
źródło
Użyj SELECT SCOPE_IDENTITY () w zapytaniu
źródło
Po tym:
Wykonaj to
To będzie działać
źródło
INSERT INTO aspnet_GameProfiles (UserId, GameId) VALUES (@UserId, @GameId) "; wtedy możesz po prostu uzyskać dostęp do ostatniego identyfikatora, porządkując tabelę w sposób malejący.
SELECT TOP 1 UserId FROM aspnet_GameProfiles ORDER BY UserId DESC.
źródło
źródło