sql >> Base de Datos >  >> RDS >> Sqlserver

SQL Server 2005:¿usando secuencias generadas en lugar de columnas de identidad?

Sí, SQL 11 tiene objetos SEQUENCE, consulte SQL Server v.Next (Denali):uso de SEQUENCE .

Es posible crear secuencias manuales, pero no se recomienda. El truco para hacer un generador de secuencias es usar ACTUALIZAR CON SALIDA en una tabla de secuencias. Aquí está el pseudocódigo:

CREATE TABLE Sequences (
    Name sysname not null primary key, 
    Sequence bigint not null default 0);
GO

CREATE PROCEDURE sp_getSequence
    @name sysname,
    @value bigint output
AS
    UPDATE Sequences
    SET Sequence = Sequence + 1
     OUTPUT @value = INSERTED.Sequence
    WHERE Name = @name;
GO

Omití algunos detalles, pero esta es la idea general. Sin embargo, existe un gran problema:cualquier transacción que solicite el siguiente valor en una secuencia se bloqueará. esa secuencia hasta que se confirme, porque colocará un bloqueo de actualización en el valor de la secuencia. Esto significa que todos las transacciones tienen que serializarse una tras otra al insertar valores y la degradación del rendimiento resultante es insoportable en implementaciones de producción reales.

Preferiría que te quedaras con los tipos de IDENTIDAD. Si bien no son perfectos, son mucho mejores que lo que puedes lograr por tu cuenta.