Megosztás a következőn keresztül:


LÉTREHOZZA SZEKVENCIÁT (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példánySQL-adatbázis a Microsoft Fabricben

Létrehoz egy szekvenciaobjektumot, és megadja annak tulajdonságait. A sorozat egy felhasználó által definiált sémaalapú objektum, amely numerikus értékek sorozatát hozza létre annak a specifikációnak megfelelően, amellyel a sorozat létre lett hozva. A numerikus értékek sorozata növekvő vagy csökkenő sorrendben, meghatározott időközönként jön létre, és konfigurálható az újraindításra (ciklusra), ha kimerült.

Az identitásoszlopokkal ellentétben a sorozatok nincsenek adott táblákhoz társítva. Az alkalmazások egy sorozatobjektumra hivatkoznak a következő érték lekéréséhez. A sorozatok és táblák közötti kapcsolatot az alkalmazás szabályozza. A felhasználói alkalmazások hivatkozhatnak egy szekvenciaobjektumra, és több sorban és táblában koordinálhatják az értékeket.

A sorok beszúrásakor létrehozott identitásoszlop-értékekkel ellentétben az alkalmazás a következő sorszám beolvasása nélkül is beolvashatja a következő sorszámot a KÖVETKEZŐ ÉRTÉK MEGADÁSÁVAL. A sp_sequence_get_range használatával egyszerre több sorszámot is lekérhet.

A függvényt CREATE SEQUENCE és a függvényt használó információkat és forgatókönyveket a NEXT VALUE FORSorszámok című témakörben talál.

Transact-SQL szintaxis konvenciók

Szemantika

CREATE SEQUENCE [ schema_name . ] sequence_name
    [ AS [ built_in_integer_type | user-defined_integer_type ] ]
    [ START WITH <constant> ]
    [ INCREMENT BY <constant> ]
    [ { MINVALUE [ <constant> ] } | { NO MINVALUE } ]
    [ { MAXVALUE [ <constant> ] } | { NO MAXVALUE } ]
    [ CYCLE | { NO CYCLE } ]
    [ { CACHE [ <constant> ] } | { NO CACHE } ]
    [ ; ]

Arguments

sequence_name

Megadja azt az egyedi nevet, amellyel a sorozat ismert az adatbázisban. A típus a sysname.

[ built_in_integer_type | felhasználó-defined_integer_type ]

A sorozatok bármilyen egész számtípusként definiálhatók. A következő típusok engedélyezettek.

  • tinyint - 0 és 255 közötti tartomány
  • smallint – -32 768 és 32 767 közötti tartomány
  • int – -2 147 483 648 és 2 147 483 647 közötti tartomány
  • bigint - Tartomány -9 223 372 036 854 775 808-9 223 372 036 854 775 807
  • decimális és numerikus , 0-s skálával.
  • Bármely felhasználó által definiált adattípus (aliastípus), amely az engedélyezett típusok egyikén alapul.

Ha nincs megadva adattípus, a rendszer a bigint adattípust használja alapértelmezettként.

KEZDJÜK ÁLLANDÓVAL <>

A sorozatobjektum által visszaadott első érték. Az START értéknek a sorozatobjektum minimális értékénél kisebb vagy egyenlő értéknek kell lennie. Az új sorozatobjektumok alapértelmezett kezdőértéke a növekvő sorrendű objektumok minimális értéke és a csökkenő sorrendű objektumok maximális értéke.

NÖVEKMÉNY ÁLLANDÓ SZERINT <>

A függvény minden hívásához használt érték (vagy negatív esetben a decrement) a sorozatobjektum értékének növeléséhez NEXT VALUE FOR . Ha a növekmény negatív érték, a szekvenciaobjektum csökkenő; ellenkező esetben növekvő. A növekmény nem lehet 0. Egy új sorozatobjektum alapértelmezett növekménye 1.

[ MINVALUE <állandó> | NINCS MINVALUE ]

Megadja a szekvenciaobjektum határait. Egy új sorozatobjektum alapértelmezett minimális értéke a sorozatobjektum adattípusának minimális értéke. Ez az apró adattípusnál nulla, az összes többi adattípusnál pedig negatív szám.

[ MAXVALUE <állandó> | NINCS MAXVALUE

Megadja a szekvenciaobjektum határait. Az új sorozatobjektumok alapértelmezett maximális értéke a sorozatobjektum adattípusának maximális értéke.

[ CIKLUS | NINCS CIKLUS ]

Az a tulajdonság, amely meghatározza, hogy a sorozatobjektumnak újra kell-e indulnia a minimális értékről (vagy csökkenő sorrendű objektumok esetén a maximális értékről), vagy kivételt jelezhet a minimális vagy maximális érték túllépése esetén. Az új sorozatobjektumok alapértelmezett ciklusbeállítása a következő NO CYCLE.

Megjegyzés:

A kerékpározás a SEQUENCE minimális vagy a maximális értékről indul újra, nem a kezdőértékből.

[ CACHE [ <állandó> ] | NINCS GYORSÍTÓTÁR ]

A sorszámok létrehozásához szükséges lemezazonosítók számának minimalizálásával növeli a sorozatobjektumokat használó alkalmazások teljesítményét. Alapértelmezett érték: CACHE.

Ha például 50-es gyorsítótárméretet választ, az SQL Server nem tartja meg az 50 egyéni érték gyorsítótárazását. Csak az aktuális értéket és a gyorsítótárban maradt értékek mennyiségét gyorsítótárazza. Ez azt jelenti, hogy a gyorsítótár tárolásához szükséges memória mennyisége mindig a szekvenciaobjektum adattípusának két példánya.

Megjegyzés:

Ha a gyorsítótár-beállítás gyorsítótárméret megadása nélkül engedélyezve van, az adatbázismotor kiválaszt egy méretet. A felhasználók azonban nem hagyatkozhatnak arra, hogy a kijelölés konzisztens legyen. A Microsoft értesítés nélkül módosíthatja a gyorsítótár méretének kiszámításának módját.

Ha a CACHE beállítással jön létre, a váratlan leállítás (például áramkimaradás) a gyorsítótárban maradó sorszámok elvesztését eredményezheti.

Megjegyzések

A sorszámok az aktuális tranzakció hatókörén kívül jönnek létre. A rendszer azt használja fel, hogy a sorszámot használó tranzakció véglegesítése vagy visszaállítása folyamatban van-e. Az ismétlődő ellenőrzés csak akkor történik meg, ha egy rekord teljesen fel van töltve. Ez olyan eseteket eredményezhet, amikor ugyanazt a számot több rekordhoz használják a létrehozás során, de a rendszer ismétlődőként azonosítja. Ha ez bekövetkezik, és más számlálóértékeket alkalmazunk a későbbi rekordokra, az eltérést eredményezhet a számlálóértékek és a várt viselkedés között.

Gyorsítótár-kezelés

A teljesítmény javítása érdekében az SQL Server előre kiosztja az argumentum által CACHE megadott sorszámokat.

Egy új sorozat például 1 kezdőértékkel és 15-ös gyorsítótármérettel jön létre. Amikor az első értékre van szükség, az 1 és 15 közötti értékek elérhetővé válnak a memóriából. Az utolsó gyorsítótárazott érték (15) a lemez rendszertábláiba lesz beírva. Ha mind a 15 számot használja, a következő kérés (a 16-os szám esetén) a gyorsítótár újbóli lefoglalását eredményezi. Az új utolsó gyorsítótárazott érték (30) a rendszertáblákba lesz írva.

Ha az adatbázismotor 22 szám használata után leáll, a rendszer a következő tervezett sorszámot (23) írja a rendszertáblákra, lecserélve a korábban tárolt számot.

Miután az SQL Server újraindul, és sorszámra van szükség, a rendszer felolvassa a kezdő számot a rendszertáblákból (23). A gyorsítótár 15 számból (23-38) van lefoglalva a memóriába, a következő nem gyorsítótárazott szám (39) pedig a rendszertáblákra lesz írva.

Ha az adatbázismotor rendellenesen leáll egy olyan eseménynél, mint például egy áramkimaradás, a sorozat újraindul a rendszertáblákból beolvasott számmal (39). A memóriába lefoglalt (de felhasználó vagy alkalmazás által soha nem kért) sorszámok elvesznek. Ez a funkció hézagokat hagyhat, de garantálja, hogy ugyanazt az értéket soha nem adja ki kétszer egyetlen sorozatobjektumhoz, kivéve, ha a rendszer manuálisan újraindul vagy definiálja CYCLE .

A gyorsítótár a memóriában marad az aktuális érték (az utolsó kibocsátott érték) és a gyorsítótárban maradt értékek nyomon követésével. Ezért a gyorsítótár által használt memória mennyisége mindig a szekvenciaobjektum adattípusának két példánya.

A gyorsítótárargumentum NO CACHE beállítása az aktuális szekvencia értékének a rendszertáblákba való írására minden alkalommal, amikor egy sorozatot használ. Ez lelassíthatja a teljesítményt a lemezhozzáférés növelésével, de csökkenti a nem kívánt rések esélyét. A hibák akkor is előfordulhatnak, ha a számokat a függvények vagy NEXT VALUE FOR a sp_sequence_get_range függvények használatával kérik, de a számokat nem használják, vagy nem véglegesített tranzakciókban használják.

Ha egy szekvenciaobjektum ezt a CACHE beállítást használja, ha újraindítja a szekvenciaobjektumot, vagy módosítja a INCREMENT, CYCLE, , MINVALUE, MAXVALUEvagy a gyorsítótár méretének tulajdonságait, az a módosítás előtt a gyorsítótárat a rendszertáblákba írja. Ezután a gyorsítótár újra betöltődik az aktuális értéktől kezdve (vagyis a program nem hagy ki számokat). A gyorsítótár méretének módosítása azonnal érvénybe lép.

GYORSÍTÓTÁR beállítás, ha a gyorsítótárazott értékek elérhetők

A következő folyamat minden alkalommal megtörténik, amikor egy szekvenciaobjektumot kérnek a beállítás következő értékének CACHE létrehozásához, ha a rendszer nem használt értékeket használ a memóriabeli gyorsítótárban a szekvenciaobjektumhoz.

  1. A rendszer kiszámítja a sorozatobjektum következő értékét.
  2. A sorozatobjektum új aktuális értéke a memóriában frissül.
  3. A program visszaadja a számított értéket a hívási utasításnak.

GYORSÍTÓTÁR-beállítás, ha a gyorsítótár kimerült

A következő folyamat minden alkalommal megtörténik, amikor egy szekvenciaobjektumot kérnek a beállítás következő értékének CACHE létrehozásához, ha a gyorsítótár kimerült:

  1. A rendszer kiszámítja a sorozatobjektum következő értékét.

  2. A rendszer kiszámítja az új gyorsítótár utolsó értékét.

  3. A szekvenciaobjektum rendszertáblasora zárolva van, és a 2. lépésben kiszámított érték (az utolsó érték) a rendszertáblába lesz beírva. A gyorsítótárban kimerült kiterjesztett esemény aktiválódik, amely értesíti a felhasználót az új tárolt értékről.

NINCS GYORSÍTÓTÁR lehetőség

A következő folyamat minden alkalommal megtörténik, amikor egy szekvenciaobjektumot kérnek a beállítás következő értékének NO CACHE létrehozásához:

  1. A rendszer kiszámítja a sorozatobjektum következő értékét.
  2. A rendszer beírja a rendszertáblába a szekvenciaobjektum új aktuális értékét.
  3. A program visszaadja a számított értéket a hívási utasításnak.

Metadaták

A szekvenciákról további információt a sys.sequences lekérdezése tartalmaz.

Biztonság

Permissions

A használatához CREATE SEQUENCE, ALTERvagy CONTROL engedélyre van szükség a SCHEMA.

  • A rögzített adatbázis-szerepkörök db_owner és db_ddladmin tagjai szekvenciaobjektumokat hozhatnak létre, módosíthatnak és elvethetnek.
  • A db_owner és db_datawriter rögzített adatbázis-szerepkörök tagjai számokat generálva frissíthetik a szekvenciaobjektumokat.

Az alábbi példa engedélyezi a felhasználónak AdventureWorks\Larry , hogy sorozatokat hozzon létre a Test sémában.

GRANT CREATE SEQUENCE
    ON SCHEMA::Test TO [AdventureWorks\Larry];

A sorozatobjektum tulajdonjoga az ALTER AUTHORIZATION utasítással ruházható át.

Ha egy sorozat felhasználó által definiált adattípust használ, a sorozat létrehozójának engedéllyel kell rendelkeznie REFERENCES a típushoz.

Audit

A naplózáshoz CREATE SEQUENCEfigyelje a SCHEMA_OBJECT_CHANGE_GROUP.

Példák

A sorozatok létrehozására és a NEXT VALUE FOR függvény sorszámok létrehozására való használatával kapcsolatos példákért lásd a Sorszámok című témakört.

Az alábbi példák többsége sorozatobjektumokat hoz létre egy Teszt nevű sémában.

A tesztséma létrehozásához hajtsa végre a következő utasítást.

CREATE SCHEMA Test;
GO

A. 1-sel növekvő sorozat létrehozása

A következő példában Thierry létrehoz egy CountBy1 nevű sorozatot, amely minden használatkor egy-egyel nő.

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

B. 1-sel csökkenő sorozat létrehozása

Az alábbi példa 0-nál kezdődik, és minden használatkor egyenként negatív számokat számol.

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

C. 5-ével növekvő sorozat létrehozása

Az alábbi példa egy olyan sorozatot hoz létre, amely minden használatkor 5-rel nő.

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

D. Kijelölt számmal kezdődő sorozat létrehozása

Egy tábla importálása után Thierry megfigyeli, hogy a használt legmagasabb azonosítószám 24 328. Thierrynek szüksége van egy sorozatra, amely 24 329-től kezdődő számokat hoz létre. Az alábbi kód egy 24 329-zel kezdődő és 1-zel növekvő sorozatot hoz létre.

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

E. Sorozat létrehozása alapértelmezett értékekkel

Az alábbi példa egy sorozatot hoz létre az alapértelmezett értékekkel.

CREATE SEQUENCE Test.TestSequence;

Hajtsa végre a következő utasítást a sorozat tulajdonságainak megtekintéséhez.

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

A kimenet részleges listája az alapértelmezett értékeket mutatja be.

Kimenet Alapértelmezett érték
start_value -9223372036854775808
increment 1
minimum_value -9223372036854775808
maximum_value 9223372036854775807
is_cycling 0
is_cached 1
current_value -9223372036854775808

F. Szekvencia létrehozása egy adott adattípussal

Az alábbi példa egy sorozatot hoz létre a kis adattípussal, -32 768 és 32 767 közötti tartományban.

CREATE SEQUENCE SmallSeq
    AS SMALLINT;

G. Sorozat létrehozása az összes argumentum használatával

Az alábbi példa decseq nevű sorozatot hoz létre a decimális adattípussal, amelynek tartománya 0 és 255 között van. A sorozat 125-zel kezdődik, és minden szám létrehozásakor 25-zel növekszik. Mivel a sorozat ciklusra van konfigurálva, ha az érték meghaladja a 200-as maximális értéket, a sorozat a minimális 100-as értékkel újraindul.

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

Hajtsa végre a következő utasítást az első érték megtekintéséhez; a START WITH 125-ös lehetőség.

SELECT  NEXT VALUE FOR Test.DecSeq;

Hajtsa végre még háromszor az utasítást a 150, 175 és 200 visszaadásához.

Futtassa újra az utasítást, és nézze meg, hogy a kezdő érték hogyan vált vissza a MINVALUE 100-ra.

Hajtsa végre a következő kódot a gyorsítótár méretének megerősítéséhez és az aktuális érték megtekintéséhez.

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