CREATE SEQUENCE (Transact-SQL)

  • 04/11/2017
  • 10 minutes to read
    • W
    • c
    • r
    • M
    • m
    • +7

Applies to: yesSQL Server (all supported versions) YesAzure SQL Database

Creates a sequence object and specifies its properties. Sekvence je uživatelem definovaný objekt vázaný na schéma, který generuje posloupnost číselných hodnot podle specifikace, se kterou byla sekvence vytvořena. Posloupnost číselných hodnot je generován ve vzestupném nebo sestupném pořadí v určeném intervalu a může být nakonfigurován tak, aby znovu (cyklus), kdy vyčerpaný. Sekvence, na rozdíl od sloupců identity, nejsou spojeny se specifickými tabulkami. Aplikace odkazují na objekt sekvence, který načte jeho další hodnotu. Vztah mezi sekvencemi a tabulkami je řízen aplikací. Uživatelské aplikace mohou odkazovat na objekt sekvence a koordinovat hodnoty ve více řádcích a tabulkách.

Na rozdíl od hodnot sloupců identity, které jsou generovány při vložení řádků, může aplikace získat další pořadové číslo bez vložení řádku voláním další hodnoty pro funkci. Použijte sp_sequence_get_range získat více pořadových čísel najednou.

informace a scénáře, které používají jak vytvoření sekvence, tak další hodnotu pro funkci, viz čísla sekvencí.

Téma ikonu odkazu Transact-SQL Syntaxe Konvence

Syntax

CREATE SEQUENCE sequence_name ] } | { NO MINVALUE } ] } | { NO MAXVALUE } ] } | { NO CACHE } ] 

Poznámka:

zobrazit Transact-SQL syntaxe pro SQL Server 2014 a dříve, viz Předchozí verze dokumentace.

argumenty

sequence_name
určuje jedinečný název, pod kterým je sekvence v databázi známa. Typ je sysname.

určuje meze pro objekt sekvence. Výchozí minimální hodnota pro nový objekt sekvence je minimální hodnota datového typu objektu sekvence. To je nula pro datový typ tinyint a záporné číslo pro všechny ostatní datové typy.

vlastnost, která určuje, zda se má objekt sekvence restartovat z minimální hodnoty (nebo maximum pro objekty sestupné sekvence) nebo hodit výjimku, když je překročena její minimální nebo maximální hodnota. Výchozí volba cyklu pro objekty nové sekvence je žádný cyklus.

Poznámka

cyklování sekvence se restartuje od minimální nebo maximální hodnoty, nikoli od počáteční hodnoty.

/ no CACHE ]
zvyšuje výkon pro aplikace, které používají sekvenční objekty minimalizací počtu disků IOs, které jsou potřebné pro generování pořadových čísel. Výchozí hodnota CACHE.

Pokud je například vybrána velikost mezipaměti 50, SQL Server neuchovává 50 jednotlivých hodnot uložených v mezipaměti. Ukládá pouze aktuální hodnotu a počet hodnot, které zůstaly v mezipaměti. To znamená, že množství paměti potřebné k uložení mezipaměti jsou vždy dvě instance datového typu objektu sekvence.

Poznámka

Pokud je povolena možnost mezipaměti bez zadání velikosti mezipaměti, databázový stroj vybere velikost. Uživatelé by se však neměli spoléhat na to, že výběr bude konzistentní. Společnost Microsoft může změnit způsob výpočtu velikosti mezipaměti bez předchozího upozornění.

při vytvoření s možností mezipaměti může neočekávané vypnutí (například výpadek napájení) vést ke ztrátě pořadových čísel zbývajících v mezipaměti.

Obecné poznámky

pořadová čísla jsou generována mimo rozsah aktuální transakce. Oni jsou spotřebovány, zda transakce pomocí pořadové číslo je potvrzena nebo vrácena zpět. K duplicitnímu ověření dochází pouze po úplném naplnění záznamu. To může vést v některých případech, kdy je stejné číslo použito pro více než jeden záznam během vytváření, ale pak je identifikováno jako duplikát. Pokud k tomu dojde a na následující záznamy byly použity jiné hodnoty autonumber, může to mít za následek mezeru mezi hodnotami autonumber a očekávaným chováním.

Správa mezipaměti

Chcete-li zlepšit výkon, SQL Server předběžně přidělí počet pořadových čísel zadaných argumentem mezipaměti.

pro příklad je vytvořena nová sekvence s počáteční hodnotou 1 a velikostí mezipaměti 15. Když je potřeba první hodnota, hodnoty 1 až 15 jsou zpřístupněny z paměti. Poslední hodnota uložená v mezipaměti (15) je zapsána do systémových tabulek na disku. Při použití všech 15 čísel způsobí další požadavek (pro číslo 16) opětovné přidělení mezipaměti. Nová poslední hodnota uložená v mezipaměti (30) bude zapsána do systémových tabulek.

Pokud Database Engine je zastavena po použití 22 čísel, další určeny pořadové číslo v paměti (23) se zapisuje do systémových tabulek, nahradí dříve uložené číslo.

po restartování serveru SQL Server a je potřeba pořadové číslo, je počáteční číslo načteno ze systémových tabulek (23). Množství mezipaměti 15 čísel (23-38) je přiděleno do paměti a další číslo bez mezipaměti (39) je zapsáno do systémových tabulek.

Pokud se databázový stroj abnormálně zastaví kvůli události, jako je výpadek napájení, sekvence se restartuje s číslem načteným ze systémových tabulek (39). Všechna pořadová čísla přidělená do paměti (ale nikdy nepožádaná uživatelem nebo aplikací) jsou ztracena. Tato funkce může zanechat mezery, ale zaručuje, že stejná hodnota nebude nikdy vydána dvakrát pro objekt s jednou sekvencí, pokud není definován jako cyklus nebo není ručně restartován.

mezipaměť je udržována v paměti sledováním aktuální hodnoty (Poslední vydaná hodnota) a počtu hodnot zbývajících v mezipaměti. Proto je množství paměti používané mezipamětí vždy dvě instance datového typu objektu sekvence.

nastavení argumentu cache na no CACHE zapíše aktuální hodnotu sekvence do systémových tabulek při každém použití sekvence. To může zpomalit výkon zvýšením přístupu na disk, ale snižuje pravděpodobnost neúmyslných mezer. Mezery mohou stále nastat, pokud jsou čísla požadována pomocí funkce NEXT VALUE FOR nebo sp_sequence_get_range, ale pak se čísla buď nepoužívají, nebo se používají v nezávazných transakcích.

Když se objekt sekvence používá MEZIPAMĚŤ, pokud restartování objekt sekvence, nebo změnit PŘÍRŮSTEK, CYKLUS, MINVALUE, MAXVALUE, nebo velikost vyrovnávací paměti vlastnosti, bude to způsobit, že cache mají být zapsány do systému tabulek dříve, než dojde ke změně. Pak je mezipaměť znovu načtena počínaje aktuální hodnotou (tj. Změna velikosti mezipaměti se projeví okamžitě.

MEZIPAMĚŤ, když mezipaměti hodnoty jsou k dispozici

následující proces probíhá pokaždé, když objekt sekvence je povinen vytvářet další hodnoty pro CACHE, pokud tam jsou nevyužité hodnoty jsou k dispozici v cache paměti pro objekt sekvence.

  1. vypočítá se další hodnota pro objekt sekvence.

  2. nová aktuální hodnota pro objekt sekvence je aktualizována v paměti.

  3. vypočtená hodnota se vrátí do příkazu volání.

MEZIPAMĚŤ, když paměť je vyčerpaná,

následující proces probíhá pokaždé, když se objekt sekvence je povinen vytvářet další hodnoty pro VYROVNÁVACÍ paměti možnost, pokud paměť byla vyčerpána:

  1. další hodnota pro objekt sekvence se počítá.

  2. vypočítá se poslední hodnota pro novou mezipaměť.

  3. řádek systémové tabulky pro objekt sekvence je uzamčen a hodnota vypočtená v kroku 2 (poslední hodnota) je zapsána do systémové tabulky. Cache-vyčerpaná xevent je vyhozen, aby informovat uživatele o nových trvalé hodnoty.

NE MEZIPAMĚŤ

následující proces probíhá pokaždé, když objekt sekvence je povinen vytvářet další hodnoty pro NE MEZIPAMĚŤ:

  1. další hodnota pro objekt sekvence se počítá.

  2. nová aktuální hodnota pro objekt sekvence se zapíše do systémové tabulky.

  3. vypočtená hodnota se vrátí do příkazu volání.

Metadata

informace o sekvencích, query sys.videosekvence.

zabezpečení

oprávnění

Vyžaduje oprávnění vytvořit sekvenci, změnit nebo ovládat schéma.

  • členové pevných databázových rolí db_owner a db_ddladmin mohou vytvářet, měnit a přetahovat objekty sekvence.

  • členové pevných databázových rolí db_owner a db_datawriter mohou aktualizovat objekty sekvence tím, že způsobí, že generují čísla.

následující příklad uděluje uživateli AdventureWorks \ Larry oprávnění k vytváření sekvencí v testovacím schématu.

GRANT CREATE SEQUENCE ON SCHEMA::Test TO 

vlastnictví objektu sekvence lze převést pomocí příkazu ALTER AUTHORIZATION.

Pokud sekvence používá uživatelem definovaný datový typ, musí mít tvůrce sekvence oprávnění k tomuto typu.

Audit

Chcete-li audit vytvořit sekvenci, Sledujte SCHEMA_OBJECT_CHANGE_GROUP.

příklady

příklady vytváření sekvencí a použití další hodnoty pro funkci pro generování pořadových čísel viz pořadová čísla.

většina z následujících příkladů vytváří sekvenční objekty ve schématu s názvem Test.

Chcete-li vytvořit testovací schéma, proveďte následující příkaz.

CREATE SCHEMA Test ; GO 

a. Vytvoření sekvence, která se zvyšuje o 1

V následujícím příkladu, Thierry vytváří sekvence jménem CountBy1, že se zvýší o jedna pokaždé, když je použit.

CREATE SEQUENCE Test.CountBy1 START WITH 1 INCREMENT BY 1 ; GO 

B. Vytvoření sekvence, která se snižuje o 1

následující příklad začíná na 0 a počítá se do záporných čísel o jedna pokaždé, když je použit.

CREATE SEQUENCE Test.CountByNeg1 START WITH 0 INCREMENT BY -1 ; GO 

C. Vytvoření sekvence, která se zvýší o 5

následující příklad vytvoří sekvenci, která se zvýší o 5 při každém použití.

CREATE SEQUENCE Test.CountBy1 START WITH 5 INCREMENT BY 5 ; GO 

D. Vytváří posloupnost, která začíná s určeným počtem

Po importu tabulky, Thierry zjistí, že nejvyšší číslo ID používané je 24,328. Thierry potřebuje sekvenci, která bude generovat čísla začínající na 24,329. Následující kód vytvoří sekvenci, která začíná 24,329 a přírůstky o 1.

CREATE SEQUENCE Test.ID_Seq START WITH 24329 INCREMENT BY 1 ; GO 

e. Vytvoření sekvence pomocí výchozích hodnot

následující příklad vytvoří sekvenci pomocí výchozích hodnot.

CREATE SEQUENCE Test.TestSequence ; 

pro zobrazení vlastností sekvence proveďte následující příkaz.

SELECT * FROM sys.sequences WHERE name = 'TestSequence' ; 

částečný seznam výstupu ukazuje výchozí hodnoty.

Output Default value
start_value -9223372036854775808
increment 1
mimimum_value -9223372036854775808
maximum_value 9223372036854775807
is_cycling 0
is_cached 1
current_value -9223372036854775808

F. Vytvoření sekvence s konkrétní datový typ

následující příklad vytvoří sekvenci pomocí smallint typ dat, s rozsahem od -32,768 do 32,767.

CREATE SEQUENCE SmallSeq AS smallint ; 

G. Vytvoření posloupnosti s použitím všech argumentů

následující příklad vytvoří sekvenci jménem DecSeq pomocí číselného datového typu, které mají rozsah od 0 do 255. Sekvence začíná 125 a přírůstky o 25 pokaždé, když je vygenerováno číslo. Protože sekvence je nakonfigurována tak, aby cyklovala, když hodnota překročí maximální hodnotu 200, sekvence se restartuje při minimální hodnotě 100.

CREATE SEQUENCE Test.DecSeq AS decimal(3,0) START WITH 125 INCREMENT BY 25 MINVALUE 100 MAXVALUE 200 CYCLE CACHE 3 ; 

proveďte následující příkaz, abyste viděli první hodnotu; START WITH možnost 125.

SELECT NEXT VALUE FOR Test.DecSeq; 

Spustit příkazem ještě třikrát vrátit 150, 175 a 200.

Spustit příkaz znovu vidět, jak začít hodnota cyklů zpět do MINVALUE možnost 100.

proveďte následující kód pro potvrzení velikosti mezipaměti a zobrazení aktuální hodnoty.

SELECT cache_size, current_value FROM sys.sequences WHERE name = 'DecSeq' ; 

Viz Také

ALTER SEQUENCE (Transact-SQL)
DROP SEQUENCE (Transact-SQL)
DALŠÍ HODNOTA (Transact-SQL)
Sekvence Čísel

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.