varios valores una tipo tabla son registros que procedimientos para modificar los llaves las insertar funcion escriba eliminar datos cuales clave asignar sql sql-server tsql

sql - valores - ¿Cómo inserto en una tabla y recupero el valor de la clave principal?



que es una clave principal en access (6)

¡¡¡Santo cielo!!!

simplemente llame a la función SCOPE_IDENTITY() :

insert into your_talble(col1,col2) values(''blah'',''more blah'') select scope_identity()

porque la selección del valor más alto devolverá un error si cualquier otra declaración realiza una inserción. la función scope_identity() devuelve la identidad creada en el contexto actual (es decir, por su declaración)

Tengo una clave principal configurada para el incremento automático.

Estoy haciendo varias consultas y necesito recuperar ese valor de clave principal para usarlo como clave externa en otra tabla ( IsIdentity = TRUE ).

¿Hay alguna forma elegante de recuperar el valor de la clave principal cuando hago una consulta de inserción? En este momento estoy volviendo a consultar y obteniendo el valor más alto en esa columna, lo que parece realmente intrépido.

¿Alguna sugerencia?


Debes usar scope_identity (). Y recomiendo incluir la instrucción insert y scope_identity () en la transacción.


SCOPE_IDENTITY () es probablemente lo que quieres. Devuelve el ID del último registro insertado por el mismo contexto de código en el que se ejecuta.

IDENT_CURRENT (''nombre de tabla'') está sujeto a problemas de concurrencia. Es decir, no hay garantía de que no se inserte otro registro entre INSERT y la llamada a IDENT_CURRENT.

Debo confesar que no estoy seguro de a qué fuente de asombro se refiere el arrebato de VillageIdiot, pero me sorprende bastante que esta pregunta no parezca ser un duplicado.


Si está utilizando SQL Server 2005 o posterior, puede usar la cláusula OUTPUT.

create table T( pk int identity primary key, dat varchar(20) ); go insert into T output inserted.pk values (''new item''); go drop table T;

La salida se puede dirigir a una tabla, así como al cliente. Por ejemplo:

create table T( pk int identity primary key, dat varchar(20) ); create table U( i int identity(1001,1) primary key, T_pk int not null, d datetime ); go insert into T output inserted.pk, getdate() into U(T_pk,d) values (''new item''), (''newer item''); go select * from T; select * from U; go drop table T, U;

A partir de SQL Server 2008, puede utilizar "DML composable" para obtener más posibilidades.


INSERT INTO YourTable (1, 2, etc.) OUTPUT inserted.yourIDcolumn VALUES (value1, value2, value...)

Nota: Esto es para MS SQL 2005 y superior.


insert into YourTable values (...)

obtener el nuevo PK con scope_identity ()

select scope_identity()