Eu tenho este código:
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();
}
Quando insiro nesta tabela, tenho uma coluna de chave primária int auto_increment chamada GamesProfileId
, como posso obter a última inserida depois disso para que eu possa usar esse ID para inserir em outra tabela?
c#
sql
sql-server
anthonypliu
fonte
fonte
OUTPUT INSERTED.ID
poderia gerar problema no caso de um gatilho ativo na mesaVocê pode criar um comando com
CommandText
igual ae executar
int id = (int)command.ExecuteScalar
.Este artigo do MSDN fornecerá algumas técnicas adicionais.
fonte
Este trabalho vil :)
fonte
Eu tive a mesma necessidade e encontrei esta resposta ..
Isso cria um registro na tabela da empresa (comp), ele pega o ID automático criado na tabela da empresa e o solta em uma tabela da equipe (equipe) para que as duas tabelas possam ser vinculadas, MUITAS equipes a UMA empresa. Funciona no meu banco de dados SQL 2008, deve funcionar no SQL 2005 e acima.
===========================
- O ' @recID' é usado para armazenar o número de ID gerado automaticamente pela empresa que estamos prestes a obter
- A linha acima é usada para criar uma tabela temporária para armazenar o número de ID gerado automaticamente para uso posterior. Ele possui apenas um campo 'tempID' e seu tipo INT é igual ao '@recID' .
- A ' SAÍDA inserida. A linha acima é usada para capturar dados de qualquer campo no registro que está criando no momento. Esses dados que queremos é o número automático de ID. Portanto, verifique se ele diz o nome do campo correto para sua tabela, a minha é 'comp_id' . Isso é descartado na tabela temporária que criamos anteriormente.
- A linha acima é usada para pesquisar a tabela temporária que criamos anteriormente, onde o ID que precisamos é salvo. Como existe apenas um registro nessa tabela temporária e apenas um campo, ele selecionará apenas o número de identificação necessário e o soltará em ' @recID '. ' @recID ' agora tem o número de identificação desejado e você pode usá-lo como quiser, como eu o usei abaixo.
- Então lá vai você. Você pode realmente pegar o que quiser na linha 'OUTPUT inserida. WhatEverFieldNameYouWant ' e criar os campos que deseja na sua tabela temporária e acessá-lo para usar como quiser.
Eu estava procurando por algo assim há muito tempo, com essa quebra detalhada, espero que isso ajude.
fonte
No SQL puro, a instrução principal é semelhante a:
Os colchetes definem os simbs da tabela e, em seguida, as colunas En e ID, entre colchetes definem a enumeração das colunas a serem iniciadas e os valores das colunas, no meu caso, uma coluna e um valor. Os apóstrofos incluem uma string
Vou explicar minha abordagem:
Pode não ser fácil de entender, mas espero que seja útil obter uma imagem geral usando o último ID inserido. Claro que existem abordagens alternativas mais fáceis. Mas tenho razões para manter a minha. As funções associadas não são incluídas, apenas seus nomes e nomes de parâmetros.
Eu uso esse método para inteligência artificial médica. O método verifica se a sequência desejada existe na tabela central (1). Se a sequência desejada não estiver na tabela central "simbs" ou se duplicatas forem permitidas, a sequência desejada será adicionada à tabela central "simbs" (2). O último id inseertado é usado para criar a tabela associada (3).
fonte
Eu tentei o acima, mas eles não funcionaram, achei esse pensamento, que funciona muito bem para mim.
É menos código e fácil de inserir.
Espero que isso ajude alguém.
fonte
Você também pode usar uma chamada para SCOPE_IDENTITY no SQL Server.
fonte
fonte
Existem várias maneiras de obter o último ID inserido, mas a maneira mais fácil que encontrei é simplesmente recuperá-lo do TableAdapter no DataSet da seguinte maneira:
Espero que isto ajude ...
fonte
Depois de inserir qualquer linha, você pode obter o último ID inserido abaixo da linha de consulta.
INSERIR EM aspnet_GameProfiles (UserId, GameId) VALUES (@UserId, @GameId); SELECT @@ IDENTITY
fonte
Use SELECT SCOPE_IDENTITY () na consulta
fonte
Depois disto:
Execute isso
Vai funcionar
fonte
INSERT IN aspnet_GameProfiles (UserId, GameId) VALUES (@UserId, @GameId) "; então você pode acessar o último ID ordenando a tabela da maneira desc.
SELECIONE O TOP 1 ID do Usuário DE aspnet_GameProfiles ORDER BY UserId DESC.
fonte
fonte