Función de obtención de valores de identificación en SQL SERVER 2000 En SQL Server 2000, la columna identidad se define por IDENTIDAD, y lo siguiente está relacionado con obtener el valor identidad del último registro insertado
Ejemplo de ilustración de la función de apagado
En SQL Server, puedes usar SCOPE_IDENTITY(), @@IDENTITY, IDENT_CURRENT() para obtener el valor del último registro insertado, y la diferencia entre ellos es: SCOPE_IDENTITY() devuelve el último valor de IDENTIDAD insertado dentro de la columna IDENTIDAD en el mismo ámbito. Un ámbito es un módulo: procedimientos almacenados, disparadores, funciones
Números o lotes. Por lo tanto, si dos sentencias están en el mismo procedimiento almacenado, función o lote, están en el mismo ámbito. @@IDENTITY Devuelve el último valor de identificación generado en todas las tablas de la sesión actual IDENT_CURRENT() devuelve el último valor de identificación generado para la tabla especificada en cualquier sesión y en cualquier ámbito Aquí tienes un ejemplo para ilustrar sus diferencias
-- a) Código de ejemplo -- =========================================== -- Crear una tabla de pruebas -- =========================================== USE tempdb VETE
CREATE TABLE t1(id int IDENTIDAD, col int) INSERTAR T1 SELECT 1 UNIÓN TODOS SELECCIONAN 2 CREATE TABLE t2(id int IDENTIDAD, col int) VETE
CREAR TR_insert_t2 TRIGGER EN T2 PARA INSERCIÓN COMO INSERTAR T1 SELECT 3 VETE
-- =========================================== -- Probar tres funciones: 1 -- =========================================== INSERTAR VALORES T2(1) SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(), [@@IDENTITY]=@@IDENTITY, [IDENT_CURRENT() Para t1]=IDENT_CURRENT(N't1'), [IDENT_CURRENT() Para t2]=IDENT_CURRENT(N't2')
/*--Resultado SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() Para t1 IDENT_CURRENT() Para t2 ------------------ ------------ -------------------------- ----------------------- 1 3 3 1
(El número de filas afectadas es 1 fila) --*/ VETE
-- =========================================== -- Probar tres funciones: 2 -- =========================================== INSERTAR VALORES T1(10) SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(), [@@IDENTITY]=@@IDENTITY, [IDENT_CURRENT() Para t1]=IDENT_CURRENT(N't1'), [IDENT_CURRENT() Para t2]=IDENT_CURRENT(N't2')
/*--Resultado SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() Para t1 IDENT_CURRENT() Para t2 ------------------ ------------ -------------------------- ----------------------- 4 4 4 1
(El número de filas afectadas es 1 fila) --*/ VETE
-- =========================================== -- Probar tres funciones: 3 -- ** Abre una nueva conexión y ejecuta el siguiente código ** -- =========================================== SELECT [SCOPE_IDENTITY()]=SCOPE_IDENTITY(), [@@IDENTITY]=@@IDENTITY, [IDENT_CURRENT() Para t1]=IDENT_CURRENT(N't1'), [IDENT_CURRENT() Para t2]=IDENT_CURRENT(N't2')
/*--Resultado SCOPE_IDENTITY() @@IDENTITY IDENT_CURRENT() Para t1 IDENT_CURRENT() Para t2 ------------------ ------------ -------------------------- ----------------------- NULL NULL 4 & n
--=========================================== -- Eliminar el entorno de prueba -- =========================================== DROP TABLE T1,T2
-- b) Descripción del resultado del código Como puedes ver en el código anterior: IDENT_CURRENT() siempre devuelve el último valor identificado insertado en la tabla especificada @@IDENTITY Devuelve el valor de identidad de la sesión actual, ya sea en el mismo ámbito o no, en las pruebas 1 y 2 se puede ver que devuelve el valor de identidad del registro insertado en el trigger, y en
En la Prueba 3, se devuelve NULL porque no hay registro de inserción en la sesión actual SCOPE_IDENTITY() devuelve el valor de identificación del mismo ámbito de la sesión actual, así que en la prueba 1, 2, devuelve el valor que no se ve afectado por el disparo, y en la prueba 3, porque la sesión actual no está interpolada
record, así que devuelve NULL
|