Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL Server 2005 - używanie wygenerowanych sekwencji zamiast kolumn tożsamości?

Tak, SQL 11 zawiera obiekty SEQUENCE, zobacz SQL Server v.Next (Denali):Używanie SEKWENCJI .

Tworzenie ręcznych sekwencji jest możliwe, ale nie zalecane. Sztuczka do wykonania generatora sekwencji polega na użyciu UPDATE WITH OUTPUT w tabeli sekwencji. Oto pseudokod:

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

Pominąłem kilka szczegółów, ale to jest ogólna idea. Istnieje jednak ogromny problem:każda transakcja żądająca następnej wartości w sekwencji zostanie zablokowana tej sekwencji, dopóki nie zostanie zatwierdzona, ponieważ umieści blokadę aktualizacji na wartości sekwencji. Oznacza to, że wszystkie transakcje muszą być serializowane jedna po drugiej podczas wstawiania wartości, a wynikające z tego pogorszenie wydajności jest nie do zniesienia w rzeczywistych wdrożeniach produkcyjnych.

Wolałbym, abyś trzymał się typów TOŻSAMOŚCI. Chociaż nie są doskonałe, są znacznie lepsze niż to, co możesz osiągnąć samodzielnie.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wybór COUNT(*) z DISTINCT

  2. Co to jest procedura składowana i dlaczego procedura składowana?

  3. Dostawca potoków nazwanych:nie można otworzyć połączenia z programem SQL Server [53]

  4. SQL grupujący podobne wartości

  5. Konwertuj kolumnę Datetime z UTC na czas lokalny w instrukcji select