Tengo este codigo:
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();
}
Cuando inserto en esta tabla, tengo una columna de clave primaria de auto_increment int llamada GamesProfileId
, ¿cómo puedo obtener la última insertada después de esto para poder usar esa identificación para insertar en otra tabla?
c#
sql
sql-server
anthonypliu
fuente
fuente
OUTPUT INSERTED.ID
podría generar un problema en caso de un activador activo en la mesaPuede crear un comando con
CommandText
igual ay ejecutar
int id = (int)command.ExecuteScalar
.Este artículo de MSDN le dará algunas técnicas adicionales.
fuente
Este vil trabajo :)
fuente
Tenía la misma necesidad y encontré esta respuesta ...
Esto crea un registro en la tabla de la compañía (comp), toma la identificación automática creada en la tabla de la compañía y la coloca en una tabla de Personal (staff) para que las 2 tablas puedan vincularse, MUCHOS empleados a UNA compañía. Funciona en mi base de datos SQL 2008, debería funcionar en SQL 2005 y superior.
===========================
- El ' @recID' se usa para mantener el número de identificación generado automáticamente por la Compañía que estamos a punto de obtener
- La línea anterior se usa para crear una tabla temporal para contener el número de ID generado automáticamente para su uso posterior. Solo tiene un campo 'tempID' y su tipo INT es el mismo que '@recID' .
-- Los ' SALIDA insertada. La línea anterior se utiliza para capturar datos de cualquier campo en el registro que está creando en este momento. Estos datos que queremos son el número de identificación automático. Así que asegúrese de que diga el nombre de campo correcto para su tabla, el mío es 'comp_id' . Esto se deja caer en la tabla temporal que creamos anteriormente.
- La línea de arriba se usa para buscar en la tabla temporal que creamos anteriormente donde se guarda la ID que necesitamos. Como solo hay un registro en esta tabla temporal, y solo un campo, solo seleccionará el número de ID que necesita y lo colocará en ' colocará @recID '. ' @recID ' ahora tiene el número de identificación que deseas y puedes usarlo como quieras como lo he usado a continuación.
-- Ahí vas. En realidad, puedes tomar lo que quieras en el 'OUTPUT insertado. WhatEverFieldNameYouWant' y crear los campos que desee en su tabla temporal y acceder a ellos para usarlos como quiera.
Estuve buscando algo así por años, con este desglose detallado, espero que esto ayude.
fuente
En SQL puro, la declaración principal funciona como:
Los corchetes definen los símbolos de la tabla y luego las columnas En e ID, los corchetes definen la enumeración de las columnas que se iniciarán y luego los valores de las columnas, en mi caso, una columna y un valor. Los apóstrofos encierran una cadena
Te explicaré mi enfoque:
Puede que no sea fácil de entender, pero espero que sea útil para obtener una idea general utilizando la última identificación insertada. Por supuesto, hay enfoques alternativos más fáciles. Pero tengo razones para mantener la mía. Las funciones asociadas no están incluidas, solo sus nombres y nombres de parámetros.
Uso este método para la inteligencia artificial médica. El método verifica si la cadena deseada existe en la tabla central (1). Si la cadena deseada no está en la tabla central "simbs", o si se permiten duplicados, la cadena deseada se agrega a la tabla central "simbs" (2). La última identificación insertada se usa para crear la tabla asociada (3).
fuente
Intenté lo anterior pero no funcionaron, encontré este pensamiento, eso funciona muy bien para mí.
Es menos código y fácil de poner.
Espero que esto ayude a alguien.
fuente
También puede usar una llamada a SCOPE_IDENTITY en SQL Server.
fuente
fuente
Hay todo tipo de formas de obtener la última identificación insertada, pero la forma más fácil que he encontrado es simplemente recuperarla del TableAdapter en el DataSet de esta manera:
Espero que esto ayude ...
fuente
Después de insertar cualquier fila, puede obtener la última identificación insertada por debajo de la línea de consulta.
INSERTAR EN VALORES aspnet_GameProfiles (UserId, GameId) (@UserId, @GameId); SELECCIONAR @@ IDENTIDAD
fuente
Use SELECT SCOPE_IDENTITY () en la consulta
fuente
Después de este:
Ejecutar esto
Funcionará
fuente
INSERTAR EN aspnet_GameProfiles (UserId, GameId) VALUES (@UserId, @GameId) "; entonces puede acceder a la última identificación ordenando la tabla en la forma desc.
SELECCIONE EL ID DE USUARIO TOP 1 DESDE aspnet_GameProfiles ORDENAR POR UserId DESC.
fuente
fuente