Fuente: Internet Autor: Desconocido
- Crear bases de datos y tablas
crear base de datos MyDataBase
usar MyDataBase
crear tabla mytable
id int identidad(1,1),
nombre Varchar(20)
)
--Ejecuta este SQL para averiguar el valor de la columna autoincremental correspondiente al registro que acaba de insertarse
insertar en los valores de mi tabla ('Li Si')
Selecciona @@identity
2. Comparación de los tres métodos
En SQL Server 2000, hay tres características similares: SCOPE_IDENTITY, IDENT_CURRENT y @@IDENTITY, todas las cuales devuelven valores insertados en la columna IDENTIDAD.
IDENT_CURRENT Devuelve el último valor de identificación generado para una tabla específica en cualquier sesión y en cualquier ámbito. IDENT_CURRENT No está limitado por el alcance y la sesión, sino por una tabla especificada. IDENT_CURRENT Devuelve el valor generado para una tabla específica en cualquier sesión y alcance.
@@IDENTITY Devuelve el último valor de identificación generado para cualquier tabla en todos los ámbitos de la sesión actual.
SCOPE_IDENTITY Devuelve el último valor identificado que se generó para la sesión actual y cualquier tabla en el ámbito actual
SCOPE_IDENTITY y @@IDENTITY devolven el último valor de identificación que se generó dentro de cualquier tabla de la sesión actual. Sin embargo, SCOPE_IDENTITY solo devuelve los valores insertados en el ámbito actual; @@IDENTITY No se limita a un alcance específico.
Por ejemplo, hay dos tablas, T1 y T2, en las que se define un disparador INSERT. Cuando se inserta una fila en T1, se activa el disparador y se inserta una fila en T2. Este ejemplo ilustra dos osciloscopios: uno en T1 y otro en T2 como resultado del disparador.
Suponiendo que tanto T1 como T2 tienen columnas IDENTITY, @@IDENTITY y SCOPE_IDENTITY devolverán valores diferentes al final de la sentencia INSERT en T1.
@@IDENTITY Devuelve el último valor de columna IDENTITY insertado en cualquier ámbito de la sesión actual, que es el valor insertado en T2.
SCOPE_IDENTITY() devuelve el valor IDENTITY insertado en T1, que es el último INSERT que ocurrió en el mismo ámbito. Si la función SCOPE_IDENTITY() se llama antes de que ocurra la sentencia de inserción a la columna identidad en el ámbito, la función devuelve un valor NULO.
Los valores devueltos por IDENT_CURRENT('T1') y IDENT_CURRENT('T2') son los últimos valores auto-incrementales de las dos tablas, respectivamente.
Experimento de AJQC: (40 hilos locales, 40+40 hilos remotos simultáneamente probando simultáneamente, insertando filas de 1200W), la conclusión es:
1. En aplicaciones típicas en cascada. @@IDENTITY no se puede usar, y se producirán conflictos concurrentes cuando 1W esté en múltiples filas en máquinas CII850 y 256M SD. En P42.8C y 512M DDR, hay un conflicto simultáneo cuando solo hay más de 6000 líneas.
2.SCOPE_IDENTITY() es absolutamente fiable y puede usarse en el proceso de almacenamiento, incluso los disparadores no necesitan ser construidos, y no hay conflictos concurrentes
SELECT IDENT_CURRENT('NombreTabla') - Devuelve el último valor de etiqueta generado en la tabla especificada
SELECT IDENT_INCR('NombreTabla') - devuelve el valor de incremento marcado del campo para la tabla especificada
SELECT IDENT_SEED('NombreTabla') - devuelve el valor de semilla marcado del campo de la tabla especificada
Devuelve el número automático del último registro insertado
SELECT IDENT_CURRENT('NombreDeTabla')
Volver al siguiente número automático:
SELECT IDENT_CURRENT('NombreDeTabla')+(SELECT IDENT_INCR('NombreDeTabla'))
SELECT @@IDENTITY - Devuelve el último valor marcado que se generó en todas las tablas de la sesión actual
|