Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL Server 2005 - използване на генерирани последователности вместо колони за самоличност?

Да, SQL 11 има обекти SEQUENCE, вижте SQL Server v.Next (Denali) :Използване на SEQUENCE .

Създаването на ръчни последователности е възможно, но не се препоръчва. Номерът да направите генератор на последователности е да използвате АКТУАЛИЗАЦИЯ С ИЗХОД на таблица с последователности. Ето псевдокод:

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

Пропуснах някои подробности, но това е общата идея. Има обаче огромен проблем:всяка транзакция, изискваща следващата стойност в последователност, ще заключи тази последователност, докато не се ангажира, защото ще постави заключване на актуализиране на стойността на последователността. Това означава, че всички транзакциите трябва да се сериализират една след друга при вмъкване на стойности и влошаването на производителността, което води до това, е непоносимо при реални производствени внедрявания.

Бих предпочел да се придържате към типовете ИДЕНТИЧНОСТ. Въпреки че не са перфектни, те са много по-добри от това, което можете да постигнете сами.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Съвети за намаляване на сложността на вашия SQL сървър

  2. Какъв е обхватът на CONTEXT_INFO в SQL Server?

  3. Как да актуализирате две таблици в един израз в SQL Server 2005?

  4. SQL заявка за броене на записи на месец

  5. Изявление за случай на T-SQL в клауза JOIN ON