Es frecuente al momento de crear tablas usar una columna con incrementos automáticos, para garantizar que
siempre tendrá un valor único, para lo cual se suele recurrir en SQL Server a
la función IDENTITY en una columna, esta función tiene sustituto dentro de lo nuevo de SQL Server 2012 con el objeto
llamado "SEQUENCES".
"SEQUENCES", es
un objeto que permite llevar un valor correlativo especificándose su valor
inicial, valor de incremento, su valor mínimo, máximo y su comportamiento puede
ser cíclico es decir al llegar al valor máximo puede volver a iniciar, este
objeto al igual que la función IDENTITY puede asociarse a una columna de la
tabla pero a diferencia este puede asociarse a mas de una tabla y el valor de
la columna se recupera de la memoria en lugar de desde el disco, también al ser un objeto se puede utilizar en
secuencias de instrucciones T-SQL, no precisamente asociadas a tablas.
Para crear un objeto "SEQUENCES" de forma grafica se puede usar el SQL
Server Management Studio, expandiendo la base de datos y buscando dentro de
"Programmability", el contenedor de "SEQUENCES", como se muestra en la imagen siguiente.
También se puede crear con instrucciones T-SQL, algunos
ejemplos de creación y aplicación se muestran a continuación:
Ejemplo1:
--Usar una
base de datos
USE Northwind
go
--Creación
del objeto secuencia
CREATE SEQUENCE Conteo
AS
tinyint
START WITH 1
INCREMENT BY 1
GO
--Creación
de una tabla
Create Table Empleado
( IdEmpleado tinyint primary key, NombreEmpleado varchar(150)
)
GO
--Usar la función
NEXT VALUE FOR... para usar la secuencia
INSERT INTO Empleado (Idempleado,NombreEmpleado)
VALUES (NEXT VALUE FOR Conteo, 'Victor Cardenas')
INSERT INTO Empleado (Idempleado,NombreEmpleado)
VALUES (NEXT VALUE
FOR Conteo, 'Claudia Hernández')
GO
--Consultar
la tabla
Select * from empleado
Ejemplo 2:
--Usar una
base de datos
USE Northwind
Go
--Creación
del objeto secuencia
CREATE SEQUENCE Conteo2
AS
tinyint
START WITH 1
INCREMENT BY 1
GO
--Creación
de una tabla incluyendo la instrucción NEXT VALUE FOR... como valor default de
una columna
Create Table Empleado2
(
IdEmpleado tinyint
primary key DEFAULT (NEXT VALUE FOR Conteo2)
, NombreEmpleado varchar(150))
GO
--insertar
datos a la tabla
INSERT INTO Empleado2 (NombreEmpleado) VALUES ('Victor Cardenas')
INSERT INTO Empleado2 (NombreEmpleado) VALUES ('Claudia Hernández')
GO
--Consultar
la tabla, y da el mismo resultado
Select * from empleado2
Ejemplo 3:
Al objeto secuencia es posible indicarle un valor máximo y
acompañarlo de la instrucción CICLE para que al momento llegar al valor máximo
vuelva a empezar, en el siguiente ejemplo no se asocia la secuencia a ninguna
tabla, simplemente se usa una instrucción SELECT para disparar el valor de la
secuencia 8 veces.
--Creación
de una Nueva Secuencia con valor máximo y el argumento CICLE
CREATE SEQUENCE Conteo4
AS tinyint
START WITH 0
INCREMENT BY 5
MAXVALUE 10
CYCLE
GO
--Ejecutar
la instrucción select 8 veces
SELECT
NEXT VALUE FOR Conteo4
GO
8
Ejemplo 4:
--Nueva
Secuencia
CREATE SEQUENCE SecuenciaOrdenada
AS tinyint
START WITH 1
INCREMENT BY 1
MINVALUE 1
NO MAXVALUE
CYCLE;
GO
--Uso de la
Secuencia con la instrucción OVER para numerar elementos de una tabla
SELECT Productid,Productname, Unitprice,
NEXT VALUE FOR SecuenciaOrdenada
OVER (ORDER BY UnitPrice DESC) As Orden
FROM Products;
--Como la
secuencia seguira con su correltativo al volvera a ejecutar la --consulta Las
Secuencias se pueden reiniciar
ALTER SEQUENCE SecuenciaOrdenada
RESTART WITH 1;
--Finalmente
una secuencia se puede destruir
DROP SEQUENCE SecuenciaOrdenada
|
miércoles, 25 de abril de 2012
SEQUENCES en SQL SERVER 2012
Suscribirse a:
Enviar comentarios (Atom)
Leyendo tu post, que dicho sea de paso, me parece excelente y de mucha utilidad, me surge la pregunta. ¿No puedo usar valores de un campo de tabla para MINVALUE y MAXVALUE?
ResponderEliminartipo:
"MINVALUE (Select U_NODSD FROM [@CK_CONTROL])
MAXVALUE (Select U_NOHST FROM [@CK_CONTROL])
INCREMENT BY 1
CYCLE"