Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

SQL Server 2005 - usando sequências geradas em vez de colunas de identidade?


Sim, o SQL 11 tem objetos SEQUENCE, consulte SQL Server v.Next (Denali):Usando SEQUENCE .

A criação de sequências manuais é possível, mas não recomendada. O truque para fazer um gerador de sequência é usar UPDATE WITH OUTPUT em uma tabela de sequências. Aqui está o pseudo-có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

Deixei de fora alguns detalhes, mas essa é a ideia geral. No entanto, há um grande problema:qualquer transação que solicite o próximo valor em uma sequência será bloqueada essa sequência até que ela seja confirmada, porque colocará um bloqueio de atualização no valor da sequência. Isso significa que todos as transações precisam serializar uma após a outra ao inserir valores e a degradação de desempenho resultante é insuportável em implantações de produção real.

Eu preferiria que você ficasse com os tipos de IDENTIDADE. Embora não sejam perfeitos, eles são muito melhores do que você pode alcançar por conta própria.