CREATE SEQUENCE (Transact-SQL), Microsoft Docs

Създава обект на последователност и указва неговите свойства. Поредица е обвързан със схема потребителски обект, който генерира поредица от числови стойности според спецификацията, с която е създадена поредицата. Последователността от числови стойности се формира във възходящ или низходящ ред с определен интервал; можете да зададете последователността да се рестартира (цикъл), когато е изчерпана. За разлика от ID колоните, последователностите не са свързани с конкретни таблици. Приложението осъществява достъп до обекта на последователността, за да получи следващата стойност. Приложенията управляват връзки между последователности и таблици. Потребителските приложения могат да препращат към обекта на последователността и да разпределят стойности в множество редове и таблици.

За разлика от стойностите на колоната за идентичност, които се създават при вмъкване на редове, приложението може да получи следващия пореден номер, без да вмъква ред, като извика функцията NEXT VALUE FOR. Можете да получите няколко стойности от последователност наведнъж, като използвате функцията sp_sequence_get_range.

За подробности и сценарии за използване на функциитеCREATE SEQUENCE иNEXT VALUE FOR вижте номерата на последователностите.

Синтактични означения в Transact-SQL

sequence_name Определя уникалното име, с което последователността е известна в базата данни. Въведетеsysname.

[ built_in_integer_type user-defined_integer_type Поредица може да бъде дефинирана с всеки тип цяло число. Разрешени са следните видове.

tinyint - диапазон от 0 до 255

smallint - диапазон от -32768 до 32767

int - диапазон от -2 147483 648 до 2 147 483 647

bigint - диапазон от -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807

десетични и цифрови с мащаб 0.

Всеки дефиниран от потребителя тип данни (псевдоним на тип), базиран на един от разрешените типове.

Ако не е указан тип данни, тогава типът bigint се използва по подразбиране.

ЗАПОЧНЕТЕ С Първата стойност, върната от обекта на последователността. СтойносттаSTART не трябва да бъде по-голяма от максималната стойност и не по-малка от минималната стойност на обекта на последователността. По подразбиране първоначалната стойност за нов обект на последователност е минималната стойност за обект на възходяща последователност и максималната стойност за обект на низходяща последователност.

INCREMENT BY Стойността, с която стойността на обекта на последователността се увеличава (или намалява, ако е отрицателна) при всяко извикване на функциятаNEXT VALUE FOR. Ако стойността на увеличението е отрицателна, тогава обектът на последователността намалява, в противен случай се увеличава. Увеличението не може да бъде 0. Увеличението по подразбиране за нов обект на последователност е 1.

[ MINVALUE NO MINVALUE ] Определя граничните стойности за обекта на последователността. По подразбиране минималната стойност за нов обект на последователност е минималната стойност за типа данни на обекта на последователност. За типа данни tinyint това е нула; за всички останали типове данни това е отрицателно число.

[ MAXVALUE NO MAXVALUE Определя граничните стойности за обекта на последователността. По подразбиране максималната стойност за нов обект на последователност е максималната стойност за типа данни на обекта на последователност.

[ CYCLE NO CYCLE ] Свойство, което показва дали обектът е рестартиранпоследователност от минималната стойност (или максималната за обекти на низходяща последователност) или хвърля изключение, когато се достигне максималната (или максималната) стойност. По подразбиране за нови обекти на последователност е БЕЗ ЦИКЪЛ.

Имайте предвид, че цикличното повторение не започва от първоначалната стойност, а от минималната или максималната стойност.

[ CACHE [ ] NO CACHE ] Подобрява производителността за приложения, които използват обекти на последователност чрез минимизиране на броя I/O операции на диска, които са необходими за генериране на последователни номера. Стойността по подразбиране е CACHE.

Например, ако е избран размер на кеша 50, тогава SQL Server не кешира 50 отделни стойности. Кешират се само текущата стойност и броят стойности, останали в кеша. Това означава, че обемът на кеш паметта винаги е равен на размера на два екземпляра от типа данни на обекта на последователността.

Забележка

Ако е указана опция за кеширане, без да се посочва размер на кеша, тогава размерът се избира от Database Engine. Потребителите обаче не трябва да разчитат на предвидимостта на избора. Microsoft може да промени този метод за изчисляване на размера на кеша без предупреждение.

Ако създаването е извършено с опциятаCACHE, тогава неочаквано изключване (като прекъсване на захранването) може да доведе до загуба на поредните номера, останали в кеша.

Общи положения

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

Управление на кеша

За да подобри производителността, SQL Server разпределя предварително броя на поредните номера,посочен в аргументаCACHE.

Например, създава се нова последователност с първоначална стойност 1 и размер на кеша 15. Когато се изисква първата стойност, от паметта стават достъпни стойности от 1 до 15. Последната кеширана стойност (15) се записва в системните таблици на диска. Когато се използват всички 15 числа, следващата заявка (за номер 16) кара кеша да бъде преразпределен. Новата последна кеширана стойност (30) се записва в системните таблици.

Ако компонентът на Database Engine спре след използване на 22 числа, тогава следващият номер на последователност, изчакващ в паметта (23), се записва в системните таблици, замествайки предишния съхранен номер.

След рестартиране на SQL Server, когато се изисква пореден номер, началният номер се чете от системните таблици (23). Кеш от 15 числа (23–38) се разпределя в паметта, а следващият номер, който не е в кеша (39), се записва в системните таблици.

Ако компонентът на DBMS Engine прекъсне неочаквано (например поради прекъсване на захранването), тогава последователността се рестартира от числото, прочетено от системните таблици (39). Всички поредни номера, разпределени в паметта (но не поискани от потребителя или приложението), се губят. Тази обработка може да позволи пропуски в числата, но е гарантирано, че една и съща стойност никога няма да бъде присвоена два пъти на един и същ обект на последователност, освен ако не е зададен наCYCLE или рестартиран ръчно.

Кешът се съхранява в паметта, като се следи текущата стойност (последно присвоена) и броя на стойностите, останали в кеша. По този начин количеството памет, използвано за кеша, винаги е равно на размера на два екземпляра от типа данни на обекта на последователността.

Ако зададете аргумента за кеша наНЕCACHE, тогава текущата стойност на последователността ще бъде записана в системните таблици всеки път, когато последователността се използва. Това може да намали производителността чрез увеличаване на броя на достъпите до диска, но намалява вероятността от нежелани пропуски в броя. Пропуски все още са възможни, ако числата се изискват с помощта на функциятаNEXT VALUE FOR или процедуратаsp_sequence_get_range, но това означава, че липсващите числа не се използват или се използват в неизпълнени транзакции.

Ако опциятаCACHE се използва за обект на последователност, тогава когато обектът на последователност се рестартира или свойстватаINCREMENT,CYCLE,MINVALUE,MAXVALUE или размерът на кеша се променят, кешът се записва в системните таблици, докато не бъде направена промяната. След това кешът се презарежда, като се започне от текущата стойност (т.е. не се пропускат числа). Промяната на размера на кеша влиза в сила незабавно.

CACHE параметър, ако има кеширани стойности

Следната процедура се изпълнява всеки път, когато обектът на последователност е поискан за генериране на следващата стойност за параметъраCACHE, ако неизползваните стойности са налични в кеша в паметта за обекта на последователност.

Изчислява се следващата стойност за обекта на последователността.

Новата текуща стойност за обекта на последователността се актуализира в паметта.

Изчислената стойност се връща към извикващата инструкция.

CACHE параметър за празен кеш

Следната процедура се изпълнява всеки път, когато обектът на последователност бъде поискан да генерира следващата стойност за параметъраCACHE, ако кешът е празен.

Изчислява се следващата стойност за обекта на последователността.

Изчислява се последната стойностза новия кеш.

Редът на системната таблица за обекта на последователността е заключен и стойността, изчислена в стъпка 2 (последната стойност), се записва в системната таблица. Задейства се събитие за изчерпване на кеша на Xevent, за да информира потребителя за новата съхранена стойност.

Параметър БЕЗ КЕШ

Следващата процедура се изпълнява всеки път, когато обектът на последователността бъде поискан да генерира следващата стойност за параметъраNO CACHE.

Изчислява се следващата стойност за обекта на последователността.

Новата текуща стойност за обекта на последователността се записва в системната таблица.

Изчислената стойност се връща към извикващата инструкция.

метаданни

За да получите информация за последователностите, потърсете изгледа sys.sequences.

Безопасност

Разрешения

ИзискваCREATE SEQUENCE,ALTER илиCONTROL разрешение за схемата SCHEMA.

Членовете на db_owner и db_ddladmin фиксирани роли на база данни могат да създават, модифицират и изтриват обекти на последователност.

Членовете на db_owner и db_datawriter фиксирани роли на база данни могат да актуализират обекти на последователност, като предизвикват генериране на числа.

Следващият пример предоставя на потребителя AdventureWorks\Larry разрешение да създава последователности в тестовата схема.

Собствеността върху обект на последователност може да бъде прехвърлена с помощта на инструкциятаALTER AUTHORIZATION.

Ако последователност използва дефиниран от потребителя тип данни, тогава създателят на последователността трябва да има разрешение REFERENCES за този тип.

За да проверите оператораCREATE SEQUENCE, следете заSCHEMA_OBJECT_CHANGE_GROUP.

Примери за създаванепоредици и използване на функциятаСЛЕДВАЩА СТОЙНОСТ ЗА за генериране на поредни номера, вижте Поредни номера.

Повечето от следващите примери създават последователни обекти в схема с име Test.

За да създадете тестова схема, изпълнете следния оператор.

A. Създаване на последователност, която се увеличава с 1

В следващия пример потребителят Thierry създава последователност с име CountBy1, която се увеличава с единица всеки път, когато се използва.

B. Създаване на последователност, намаляваща с 1

Следващият пример започва от 0 и преминава през отрицателни числа, намалявайки с единица всеки път, когато се използва.

B. Създаване на последователност, която се увеличава с 5

Следващият пример създава последователност, която се увеличава с 5 при всеки достъп до нея.

D. Създайте поредица, започваща с дадено число

След като импортира таблицата, Тиери забелязва, че максималният идентификационен номер е 24328. Тиери се нуждае от последователност, която ще генерира числа, започващи от 24329. Следният код създава последователност, която започва от 24329 и се увеличава с 1.

E. Създайте последователност със стойности по подразбиране

Следващият пример създава последователност със стойности по подразбиране.

Частичен списък на изхода показва стойностите по подразбиране.