INDENTITY
BASE DE DATOS II
Un campo numrico puede tener un atributo extra "identity". Los valores de un campo con este atributo genera valores secuenciales que se inician en 1 y se incrementan en 1 automticamente. Se utiliza generalmente en campos correspondientes a cdigos de identificacin para generar valores nicos para cada nuevo registro que se inserta. Slo puede haber un campo "identity" por tabla. Para que un campo pueda establecerse como "identity", ste debe ser entero (tambin puede ser de un subtipo de entero o decimal con escala 0, tipos que estudiaremos posteriormente).
Para que un campo genere sus valores automticamente, debemos agregar el atributo "identity" luego de su definicin al crear la tabla: create table libros( codigo int identity, titulo varchar(40) not null, autor varchar(30), editorial varchar(15), precio float ); Cuando un campo tiene el atributo "identity" no se puede ingresar valor para l, porque se inserta automticamente tomando el ltimo valor como referencia, o 1 si es el primero.
insert into libros ( titulo,autor,editorial,precio) values('El aleph','Borges','Emece',23); Este primer registro ingresado guardar el valor 1 en el campo correspondiente al cdigo. Si continuamos ingresando registros, el cdigo (dato que no ingresamos) se cargar automticamente siguiendo la secuencia de autoincremento. No est permitido ingresar el valor correspondiente al campo "identity", por ejemplo:
Ejemplo:
insert into libros (codigo,titulo,autor,editorial,precio) values(5,'Martin Fierro','Jose Hernandez','Paidos',25); generar un mensaje de error. "identity" permite indicar el valor de inicio de la secuencia y el incremento, pero lo veremos posteriormente. Un campo definido como "identity" generalmente se establece como clave primaria. Un campo "identity" no es editable, es decir, no se puede ingresar un valor ni actualizarlo.
Un campo de identidad no permite valores nulos, aunque no se indique especificamente. el procedimiento "sp_columns table_name" veremos que en el campo "codigo" en la columna "TYPE_NAME" aparece "int identity" y en la columna "IS_NULLABLE" aparece "NO". Los valores secuenciales de un campo "identity" se generan tomando como referencia el ltimo valor ingresado; si se elimina el ltimo registro ingresado (por ejemplo 3) y luego se inserta otro registro, SQL Server seguir la secuencia, es decir, colocar el valor "4".
En el siguiente ejemplo, crea la tabla "alumnos" con un campo que representa un cdigo de identificacin que tendr valores a partir de 100: CREATE TABLE alumnos (Nombre char(20), ident int IDENTITY (100,1), curso char(5), edad int null) En el siguiente ejemplo, se altera una tabla para agregar una columna autoincremental: ALTER TABLE ex_alumnos ADD ex_alumno_Id INT IDENTITY (100,1)
Usar DBCC CHECKIDENT. Se utiliza para cambiar o alterar el contenido de una columna auto incremental (IDENTITY). Sintaxis DBCC CHECKIDENT ( 'table_name' [ , { NORESEED | { RESEED [ , ew_reseed_value ] } } ] ) En este ejemplo se establece el valor de identidad actual de la tabla jobs en 30. USE pubs GO DBCC CHECKIDENT (jobs, RESEED, 30) GO
DBCC CHECKIDENT (NOMBRE_TABLA, RESEED, 0) Donde NOMBRE_TABLA es la tabla que contiene el campo autoincremental que deseamos reiniciar y el parmetro 0 el nuevo valor para la semilla.
La funcin "ident_seed()" retorna el valor de inicio del campo "identity" de la tabla que nombramos: select ident_seed('libros'); La funcin "ident_incr()" retorna el valor de incremento del campo "identity" de la tabla nombrada: select ident_incr('libros'); Hemos visto que en un campo declarado "identity" no puede ingresarse explcitamente un valor. Para permitir ingresar un valor en un campo de identidad se debe activar la opcin "identity_insert":
set identity_insert libros on; Es decir, podemos ingresar valor en un campo "identity" seteando la opcin "identity_insert" en "on". Cuando "identity_insert" est en ON, las instrucciones "insert" deben explicitar un valor: insert into libros (codigo,titulo) values (5,'Alicia en el pais de las maravillas'); Si no se coloca un valor para el campo de identidad, la sentencia no se ejecuta y aparece un mensaje de error: insert into libros (titulo,autor, editorial) values ('Matematica estas ahi','Paenza','Paidos'); El atributo "identity" no implica unicidad, es decir, permite repeticin de valores; por ello hay que tener cuidado al explicitar un valor porque se puede ingresar un valor repetido. Para desactivar la opcin "identity_insert" tipeamos: set identity_insert libros off;
Especifica que solo se devolver el primer conjunto de filas del resultado de la consulta. El conjunto de filas puede ser un nmero o un porcentaje de las filas. La expresin TOP se puede usar en instrucciones SELECT, INSERT, UPDATE, MERGE y DELETE. SELECT TOP 10 * FROM tabla
top
En el ejemplo siguiente se utiliza una variable para obtener los 10 primeros empleados enumerados en la tabla Employee DECLARE @p AS int; SELECT @p=10 SELECT TOP(@p)* FROM [Link];
SELECT TOP(10) PERCENT WITH TIES [Link], [Link], [Link], [Link], [Link] FROM [Link] AS pp INNER JOIN [Link] AS e ON [Link] = [Link] INNER JOIN [Link] AS r ON [Link] = [Link] ORDER BY Rate DESC;
En el ejemplo siguiente se obtiene el 10% de los empleados que tienen los salarios ms altos y los devuelve en orden descendente de acuerdo con el salario base. La especificacin de WITH TIES garantiza que tambin se incluyan los empleados con salarios iguales al salario ms bajo en el conjunto de resultados, aun cuando esto exceda el 10% de los empleados.
SQL Select Top 10 rows: SELECT TOP 10 * FROM Employees SELECT TOP 10 * FROM Employees Select top 5 records of highest salary: SELECT TOP 5 * FROM Employees ORDER BY Salary DESC SELECT TOP 5 * FROM Employees ORDER BY Salary DESC SQL
Select top 5 percent of highest salary: SELECT TOP 5 PERCENT * FROM Employees ORDER BY Salary DESC SELECT TOP 5 PERCENT * FROM Employees ORDER BY Salary