Este artículo explora la función de identidad en SQL Server con ejemplos y diferencias entre estas funciones.
Descripción general de las columnas de identidad
en SQL Server, creamos una columna de identidad para generar automáticamente valores incrementales. Genera valores basados en valores de semilla (valor inicial) y de paso (incremento) predefinidos. Por ejemplo, supongamos que tenemos una tabla de empleados y queremos generar EmployeeID automáticamente., Tenemos un ID de empleado inicial 100 y además queremos incrementar cada nuevo EmpID en uno. En este caso, necesitamos definir los siguientes valores.
- Seed: 100
- Step: 1
insertemos algunos registros en esta tabla y veamos los registros.
Puede ver que el primer empleado obtiene un valor de ID 100 y cada nuevo valor de ID de Registros obtiene un incremento de uno.
tenemos algunas funciones de identidad útiles en SQL Server para trabajar con las columnas de identidad en una tabla. Exploremos las siguientes funciones de identidad con ejemplos.,
- SQL @@IDENTITY Function
- SQL SCOPE_IDENTITY() Function
- SQL IDENT_CURRENT Function
- SQL IDENTITY Function
- SQL IDENTITY Function
SQL @@IDENTITY Function
utilizamos system function @@IDENTITY para devolver el valor máximo de identidad utilizado en una tabla para la columna IDENTITY bajo la sesión actual. Una vez que insertamos una fila en una tabla, la columna de la función @@IDENTITY da el valor de identidad generado por la instrucción. Si ejecutamos cualquier consulta que no generó valores de identidad, obtenemos un valor NULL en la salida., La identidad SQL @@se ejecuta bajo el ámbito de la sesión actual. No podemos usarlo en un servidor remoto o vinculado.
vamos a entenderlo con el siguiente ejemplo.
- Paso 1: Tenemos un valor máximo de identidad actual 110 en la tabla EmployeeData
- Paso 2: en la sesión actual, insertamos un registro en la tabla EmployeeData., Aumenta el valor de identidad en uno
- Paso 3: podemos verificar que el valor de identidad máximo utilizado es 111
- Paso 4: usamos la función SELECT @ @ IDENTITY en la sesión actual para obtener el valor de identidad generado en esta sesión
insertemos varios registros en esta tabla y ejecutemos la identidad SELECT@@.
si insertamos varios registros en una sesión, SELECT @ @ Identity devuelve el valor máximo de identidad generado en esta sesión., En el siguiente ejemplo, insertamos tres registros y aumenta los valores de identidad en tres desde el valor de identidad actual 111.
si la instrucción no genera ningún valor de identidad, devuelve valores NULL en la salida.
función SQL SCOPE_IDENTITY ()
utilizamos la función SCOPE_IDENTITY() para devolver el último valor de identidad en una tabla bajo el ámbito actual. Un ámbito puede ser un Módulo, un disparador, una función o un procedimiento almacenado., Podemos considerar la función SQL SCOPE_IDENTITY () similar a la función @@IDENTITY, pero está limitada a un ámbito específico. Devuelve el valor NULL si esta función está involucrada antes de que una instrucción insert genere un valor bajo el mismo ámbito.
en el siguiente ejemplo, vemos que tanto la @ @ IDENTITY como SCOPE_IDENTITY () devuelven el mismo valor en la sesión actual y un ámbito similar.
entendamos la diferencia entre SCOPE_IDENTITY() y @@IDENTITY con otro ejemplo.,
consideremos que tenemos dos tablas EmployeeData y tabla de departamentos. Creamos un disparador INSERT en la tabla EmployeeData. Una vez que insertamos cualquier fila en EmployeeData, llama al desencadenador definido para insertar una fila en departamentos.
en la siguiente consulta, creamos un disparador para insertar el valor predeterminado ‘IT’ en la tabla departments para cada inserción en la tabla EmployeeData.,f7″>
1
2
3
4
5
6
|
CREATE TRIGGER T_INSERT_DEPARTMENT
EN EmployeeData
PARA INSERTAR
BEGIN
INSERTAR Departamentos VALUES (‘ES’)
END;
|
Vamos a insertar el valor en la tabla de datos de Empleado y ver el resultado de tanto @@IDENTITY y SCOPE_IDENTITY() funciones.,
en la sesión actual, insertamos datos en la tabla EmployeeData. Genera una identidad en esta tabla. El valor semilla de identidad es 1 para la tabla EmployeeData.
Una vez que insertamos el valor en la tabla EmployeeData, se activa un disparador para insertar el valor en la tabla Departments. El valor de semilla de identidad es 100 para la tabla Departments.
- obtenemos la salida 100 para la función SELECT @ @ IDENTITY
- La función SCOPE_IDENTITY devuelve el valor de identidad solo en el ámbito actual., Da salida 1 para esta función
SQL IDENT_CURRENT() function
utilizamos la función IDENT_CURRENT para devolver el último valor de identidad generado para una tabla especificada bajo cualquier conexión. No considera el alcance de la consulta SQL que genera el valor de identidad. Necesitamos especificar la tabla para la que queremos comprobar el valor de identidad.
en la siguiente captura de pantalla, podemos ver que insertamos datos en Session id 64 y genera el valor de identidad 2 en la tabla EmployeeData.,
podemos consultar en otra ventana de conexión el valor de identidad actual de la tabla EmployeeData y obtener el mismo resultado que el valor de identidad 2.,
1
|
SELECT IDENT_CURRENT(‘EmployeeData’) AS IdentityValue
|
SQL IDENTITY Function
In my previous article, we explored SQL SELECT INTO Statement, to create a new table and inserted data into it from the existing table., Podemos usar la función SQL IDENTITY para insertar valores de identidad en la tabla creada por SQL SELECT en la instrucción.
de forma predeterminada, si una tabla de origen contiene una columna de identidad, la tabla creada mediante una instrucción SELECT INTO la hereda. Considere un escenario en el que desee crear una tabla utilizando la instrucción SELECT INTO desde la salida de una vista o unirse desde varias tablas. En este caso, también desea crear una columna de identidad en una tabla nueva.,
- Nota: La función de identidad SQL es diferente de la propiedad de identidad que usamos al crear cualquier tabla.
necesitamos especificar un tipo de datos para una columna para usar la función SQL Identity. También necesitamos especificar valores SEED y Step para definir una configuración de identidad.
no podemos usar la función SQL IDENTITY en una instrucción Select. Recibimos el siguiente mensaje de error.
Msg 177, Nivel 15, Estado 1, línea 2la función de identidad solo se puede usar cuando la instrucción SELECT tiene una cláusula INTO.,
vamos a crear una tabla usando la instrucción SQL SELECT INTO con la siguiente consulta.
una vez ejecutada la instrucción, compruebe las propiedades de la tabla usando el comando sp_help.
1
|
sp_help ‘TEMPTABLE’
|
Usted puede ver la columna de IDENTIDAD en el TEMPTABLE propiedades como por las condiciones especificadas.,
veamos otro ejemplo. Ejecute el siguiente comando.,
1
2
3
4
5
|
SELECCIONE IDENTIDAD( INT, 100, 2) COMO NEW_ID,
ID
Nombre
EN temp2
DE employeedata;
|
ya Tenemos la columna de IDENTIDAD en el EmployeeData tabla. La nueva tabla temp2 también hereda la columna identidad., No podemos tener varias columnas de identidad en una tabla. Debido a esto, obtenemos el siguiente mensaje de error.
Msg 8108, Level 16, State 1, Line 1cannot add identity column, using the SELECT INTO statement, to table ‘temp2’, which already has column ‘ID’ that inherits the identity property.
Summary
- LAS FUNCIONES DE IDENTIDAD SQL SCOPE_IDENTITY, IDENT_CURRENT y @@IDENTITY devuelven resultados similares para columnas de identidad en la sesión actual
- SCOPE_IDENTITY devuelve valores solo en el ámbito actual., Podemos definir scope como un módulo, procedimiento almacenado, disparador o una función
- La función IDENT_CURRENT devuelve el valor de identidad para una tabla especificada con respecto a una conexión que modificó el valor
- Podemos usar la función SQL IDENTITY para definir identidad en una tabla creada usando SQL SELECT INTO statement
Conclusion
had en este artículo, exploramos las funciones de identidad en SQL Server. Deberíamos estar familiarizados con las funciones para usarlas en la escritura de consultas T-SQL. Si tiene comentarios o preguntas, no dude en dejarlos en los comentarios a continuación.,
- Autor
- mensajes Recientes
Ver todos los mensajes por Rajendra Gupta
- la Realización de menor y mayor actualización de la versión para AWS RDS SQL Server – 29 de enero de 2021
- la Implementación de AWS RDS para PostgreSQL instancias – 27 de enero de 2021
- la Migración de las instalaciones de la bases de datos de SQL AWS RDS de SQL Server mediante el uso de AWS DMS – 25 de enero de 2021