Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Felügyelt Azure SQL-példány
SQL-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.
- A rendszer kiszámítja a sorozatobjektum következő értékét.
- A sorozatobjektum új aktuális értéke a memóriában frissül.
- 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:
A rendszer kiszámítja a sorozatobjektum következő értékét.
A rendszer kiszámítja az új gyorsítótár utolsó értékét.
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:
- A rendszer kiszámítja a sorozatobjektum következő értékét.
- A rendszer beírja a rendszertáblába a szekvenciaobjektum új aktuális értékét.
- 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';