SQL11 (Denali): Nuevo Objeto SEQUENCE
En el CTP1 Denali tenemos un nuevo objeto muy interesante denominado SEQUENCE para manejar secuencia de números entre el rango de -2^31 – 1 hasta 2^31 –1. SEQUENCE soluciona muchos problemas relacionado al uso de la propiedad IDENTITY, no está amarrado a la columna y se puede usar para varias columnas en diferentes tablas. También es útil como alternativa limitada a ROW_NUMBER. Su uso es bien sencillo, práctico y flexible, ofrece mejor performance que IDENTITY, no se puede usar dentro de funciones ni con DISTINCT, UNION, EXCEPT y INTERSECT pero sí con UNION ALL, y para garantizar la unicidad se recomienda crear un índice sobre las columnas que se alimentan de los valores de esta función. Cuidado con el uso de índices, puede mejorar las consultas, pero a la vez impactar negativamente en las operaciones de actualización.
Definitivamente SEQUENCE será de demasiada utilidad, sin embargo, no olvidar que cada cosa tiene sus escenarios de uso y también sus limitaciones. Para crear un objeto SEQUENCE suficiente con esto:
CREATE SEQUENCE dbo.MySeq
AS INT
START WITH 1
INCREMENT BY 1
MINVALUE 1
MAXVALUE 100
CYCLE
CACHE 20
;
Para usarlo:
select NEXT VALUE FOR dbo.MySeq
GO 4
Resultado:
(no column name)
1
2
3
4
Si volvemos a ejecutar la sentencia anterior, el resultado será los número del 5 al 8 y asi sucesivamente. Si en algún momento deseamos reinicializar la secuencia podemos lograrlo asi:
ALTER SEQUENCE dbo.MySeq RESTART
Y si deseamos la secuencia sea cíclica simplemente usamos el atributo CYCLE en la definición del objeto. Por otra parte, como alternativa básica a ROW_NUMBER() podemos usarlo de la siguiente manera:
select next value for dbo.MySeq as [nro], Employees.FirstName from Employees
o también de esta manera:
select next value for dbo.MySeq over (order by customers.CustomerID ) as [nro],
customers.CustomerID, Customers.ContactName
from Customers
Pueden revisar a más detalle acerca de SEQUENCE en las referencias que doy a continuación donde existe suficiente cantidad de ejemplos con las que se pueden familiarizar.
Creating and Using Sequence Numbers
http://msdn.microsoft.com/en-us/library/ff878058(v=SQL.110).aspx
sp_sequence_get_range (Transact-SQL)
http://msdn.microsoft.com/en-us/library/ff878352(v=SQL.110).aspx
SQL Server v.Next (Denali) : Using SEQUENCE
http://sqlblog.com/blogs/aaron_bertrand/archive/2010/11/11/sql-server-11-denali-using-sequence.aspx
PercyReyes,