- 04/11/2017
- 10 minutes to read
-
- W
- c
- r
- M
- m
-
+7
Applies to: SQL Server (all supported versions) Azure SQL Database
Creates a sequence object and specifies its properties. A szekvencia egy felhasználó által definiált sémához kötött objektum, amely numerikus értékek sorozatát generálja annak a specifikációnak megfelelően, amellyel a szekvencia létrejött. A numerikus értékek sorozata egy meghatározott időközönként növekvő vagy csökkenő sorrendben jön létre, és konfigurálható újraindításra (ciklus), ha kimerül. A szekvenciák, az identitásoszlopokkal ellentétben, nem kapcsolódnak konkrét táblákhoz. Az alkalmazások egy szekvenciaobjektumra hivatkoznak a következő érték lekéréséhez. A szekvenciák és táblázatok közötti kapcsolatot az alkalmazás szabályozza. A felhasználói alkalmazások hivatkozhatnak egy szekvencia objektumra, és összehangolhatják az értékeket több sorban és táblában.
a sorok beszúrásakor generált identitásoszlop-értékekkel ellentétben az alkalmazás a sor beszúrása nélkül megszerezheti a következő sorszámot a függvény következő értékének meghívásával. Használja sp_sequence_get_range, hogy több sorszámot egyszerre.
a szekvencia létrehozása és a függvény következő értéke egyaránt használható információkat és forgatókönyveket lásd a szekvencia számok című részben.
Transact-SQL szintaxis konvenciók
Syntax
CREATE SEQUENCE sequence_name ] } | { NO MINVALUE } ] } | { NO MAXVALUE } ] } | { NO CACHE } ]
megjegyzés
az SQL Server 2014 és korábbi verzióinak Transact-SQL szintaxisának megtekintéséhez lásd az előző verziók dokumentációját.
argumentumok
sequence_name
megadja azt az egyedi nevet, amellyel a szekvencia ismert az adatbázisban. A típus sysname.
meghatározza a szekvencia objektum határait. Az új szekvencia objektum alapértelmezett minimális értéke a szekvencia objektum adattípusának minimális értéke. Ez a tinyint adattípus esetében nulla, az összes többi adattípus esetében pedig negatív szám.
tulajdonság, amely meghatározza, hogy a szekvencia objektumnak újra kell-e indulnia a minimális értékről (vagy a csökkenő szekvencia objektumok esetében a maximumról), vagy kivételt kell-e dobnia, ha a minimális vagy maximális értéket túllépi. Az új sorozatobjektumok alapértelmezett ciklusbeállítása a Nincs ciklus.
Megjegyzés
A sorozat ciklusa a minimális vagy maximális értékről indul újra, nem a kezdő értékről.
/ nincs gyorsítótár]
növeli a szekvencia objektumokat használó alkalmazások teljesítményét azáltal, hogy minimalizálja a sorszámok létrehozásához szükséges lemezes IOs-ek számát. Alapértelmezés szerint gyorsítótár.
ha például 50-es gyorsítótár-méretet választ, az SQL Server nem tárol 50 egyedi értéket. Csak az aktuális értéket és a gyorsítótárban maradt értékek számát tárolja. Ez azt jelenti, hogy a gyorsítótár tárolásához szükséges memória mennyisége mindig a szekvencia objektum adattípusának két példánya.
Megjegyzés
Ha a gyorsítótár opció engedélyezve van a gyorsítótár méretének megadása nélkül, az adatbázismotor kiválaszt egy méretet. A felhasználók azonban nem támaszkodhatnak arra, hogy a kiválasztás következetes. A Microsoft értesítés nélkül megváltoztathatja a gyorsítótár méretének kiszámításának módját.
a gyorsítótár opcióval történő létrehozáskor egy váratlan leállítás (például áramkimaradás) a gyorsítótárban maradt sorszámok elvesztését eredményezheti.
Általános megjegyzések
a sorszámok az aktuális tranzakció hatókörén kívül keletkeznek. Felhasználják őket, függetlenül attól, hogy a sorszámot használó tranzakció elkötelezett-e vagy visszahúzódik-e. A duplikált érvényesítés csak akkor történik meg, ha a rekord teljesen kitöltött. Ez bizonyos esetekben azt eredményezheti, hogy ugyanazt a számot egynél több rekordhoz használják a létrehozás során, de ezt követően másolatként azonosítják. Ha ez megtörténik, és más automatikus számértékeket alkalmaznak a következő rekordokra, ez az automatikus számértékek és a várható viselkedés közötti rést eredményezheti.
gyorsítótár-kezelés
a teljesítmény javítása érdekében az SQL Server előre kiosztja a gyorsítótár argumentum által megadott sorszámok számát.
például egy új szekvencia jön létre, amelynek kezdő értéke 1, gyorsítótár mérete pedig 15. Amikor az első érték szükséges, az 1-től 15-ig terjedő értékek a memóriából állnak rendelkezésre. Az utolsó gyorsítótárazott érték (15) a lemez rendszertábláiba kerül. Ha mind a 15 számot használja, a következő kérés (a 16-os számhoz) a gyorsítótár újbóli kiosztását eredményezi. Az új Utolsó gyorsítótárazott érték (30) a rendszertáblákba kerül.
Ha az adatbázismotor 22 szám használata után leáll, a memóriában a következő tervezett sorszámot (23) a rendszertáblákba írja, helyettesítve a korábban tárolt számot.
miután az SQL Server újraindul, és szükség van egy sorszámra, a rendszer a rendszertáblázatokból beolvassa a kezdő számot (23). A 15 szám (23-38) gyorsítótár mennyisége a memóriához van rendelve, a következő nem gyorsítótár szám (39) pedig a rendszertáblákba kerül.
Ha az adatbázismotor rendellenesen leáll egy olyan esemény miatt, mint például áramkimaradás, a sorozat újraindul a rendszertáblázatokból leolvasott számmal (39). A memóriához rendelt (de a felhasználó vagy az 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 adják ki kétszer egyetlen szekvencia objektumra, kivéve, ha ciklusként definiálják, vagy manuálisan újraindítják.
a gyorsítótár a memóriában marad az aktuális érték (az utolsó kiadott érték) és a gyorsítótárban maradt értékek számának követésével. Ezért a gyorsítótár által használt memória mennyisége mindig a szekvencia objektum adattípusának két példánya.
A gyorsítótár Argumentumának beállítása Nincs gyorsítótár írja az aktuális szekvenciaértéket a rendszertáblákba minden alkalommal, amikor egy szekvenciát használnak. Ez lassíthatja a teljesítményt a lemezhez való hozzáférés növelésével, de csökkenti a nem kívánt hiányosságok esélyét. Hiányosságok akkor is előfordulhatnak, ha a számokat a következő érték vagy az sp_sequence_get_range függvények használatával kérik, de akkor a számokat vagy nem használják, vagy nem kötelező tranzakciókban használják.
Ha egy szekvencia objektum a gyorsítótár opciót használja, ha újraindítja a szekvencia objektumot, vagy megváltoztatja a növekmény, a ciklus, a MINVALUE, a MAXVALUE vagy a gyorsítótár méretének tulajdonságait, akkor a gyorsítótár a változás bekövetkezése előtt a rendszertáblákba kerül. Ezután a gyorsítótár újratöltésre kerül az aktuális értékkel kezdve (azaz egyetlen számot sem hagy ki). A gyorsítótár méretének megváltoztatása azonnal hatályba lép.
gyorsítótár beállítás, Ha a gyorsítótárban tárolt értékek rendelkezésre állnak
a következő folyamat minden alkalommal megtörténik, amikor egy szekvencia objektumot kérnek a gyorsítótár beállítás következő értékének létrehozásához, ha a szekvencia objektumhoz nem használt értékek állnak rendelkezésre a memóriában lévő gyorsítótárban.
-
a szekvencia objektum következő értéke kerül kiszámításra.
-
a szekvencia objektum új aktuális értéke frissül a memóriában.
-
a számított érték visszatér a hívó utasításhoz.
gyorsítótár opció a gyorsítótár kimerülésekor
a következő folyamat történik minden alkalommal, amikor egy szekvencia objektumot kérnek a gyorsítótár opció következő értékének létrehozásához, ha a gyorsítótár kimerült:
-
a szekvencia objektum következő értéke kiszámításra kerül.
-
az új gyorsítótár utolsó értéke kerül kiszámításra.
-
a sequence objektum rendszertáblázatának sora zárolva van, és a 2.lépésben kiszámított érték (az utolsó érték) be van írva a rendszertáblába. A gyorsítótár-kimerült xevent ki van kapcsolva, hogy értesítse a felhasználót az új fennmaradt értékről.
nincs gyorsítótár opció
a következő folyamat történik minden alkalommal, amikor egy szekvencia objektumot kérnek a Nincs gyorsítótár opció következő értékének előállításához:
-
a szekvencia objektum következő értékét számítják ki.
-
a szekvencia objektum új aktuális értéke a rendszertáblába kerül.
-
a számított érték visszatér a hívó utasításhoz.
metaadatok
a szekvenciákkal kapcsolatos információkért, lekérdezés sys.szekvenciák.
biztonság
engedélyek
szekvencia létrehozása, módosítása vagy vezérlési engedély szükséges a sémán.
-
A db_owner és db_ddladmin rögzített adatbázis-szerepkörök tagjai létrehozhatnak, megváltoztathatnak és eldobhatnak szekvenciaobjektumokat.
-
A db_owner és db_datawriter rögzített adatbázis-szerepkörök tagjai frissíthetik a szekvencia objektumokat azáltal, hogy számokat generálnak.
a következő példa engedélyt ad az AdventureWorks\Larry felhasználónak szekvenciák létrehozására a Tesztsémában.
GRANT CREATE SEQUENCE ON SCHEMA::Test TO
egy szekvencia objektum tulajdonjoga átruházható az ALTER AUTHORIZATION utasítás használatával.
Ha egy szekvencia felhasználó által definiált adattípust használ, a szekvencia létrehozójának rendelkeznie kell a típusra vonatkozó hivatkozási engedéllyel.
Audit
a szekvencia létrehozásának ellenőrzéséhez figyelje a SCHEMA_OBJECT_CHANGE_GROUP értéket.
példák
a szekvenciák létrehozására és a függvény következő értékének sorozatszámok létrehozására vonatkozó példáit lásd: sorozatszámok.
a következő példák többsége szekvenciaobjektumokat 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-gyel növelő szekvencia létrehozása
a következő példában Thierry létrehoz egy CountBy1 nevű szekvenciát, amely minden használat során eggyel növekszik.
CREATE SEQUENCE Test.CountBy1 START WITH 1 INCREMENT BY 1 ; GO
B. olyan szekvencia létrehozása, amely 1-gyel csökken
a következő példa 0-nál kezdődik, és minden használat során eggyel számol negatív számokra.
CREATE SEQUENCE Test.CountByNeg1 START WITH 0 INCREMENT BY -1 ; GO
C. 5-tel növelő szekvencia létrehozása
a következő példa olyan szekvenciát hoz létre, amely minden használat során 5-tel növekszik.
CREATE SEQUENCE Test.CountBy1 START WITH 5 INCREMENT BY 5 ; GO
D. egy kijelölt számmal kezdődő sorozat létrehozása
táblázat importálása után Thierry észreveszi, hogy a legmagasabb használt azonosító szám 24 328. Thierry – nek szüksége van egy szekvenciára, amely 24 329-től kezdődő számokat generál. A következő kód létrehoz egy sorozatot, amely 24 329-tel kezdődik, és 1-gyel növekszik.
CREATE SEQUENCE Test.ID_Seq START WITH 24329 INCREMENT BY 1 ; GO
E. Szekvencia létrehozása alapértelmezett értékekkel
a következő példa az alapértelmezett értékek felhasználásával hoz létre szekvenciát.
CREATE SEQUENCE Test.TestSequence ;
a szekvencia tulajdonságainak megtekintéséhez hajtsa végre a következő utasítást.
SELECT * FROM sys.sequences WHERE name = 'TestSequence' ;
a kimenet részleges listája bemutatja az alapértelmezett értékeket.
Output | Default value | |
---|---|---|
start_value |
-9223372036854775808 |
|
increment |
1 |
|
mimimum_value |
-9223372036854775808 |
|
maximum_value |
9223372036854775807 |
|
is_cycling |
0 |
|
is_cached |
1 |
|
current_value |
-9223372036854775808 |
F. szekvencia létrehozása egy adott adattípussal
a következő példa egy sorozatot hoz létre a smallint adattípus használatával, -32 768 és 32 767 között.
CREATE SEQUENCE SmallSeq AS smallint ;
G. szekvencia létrehozása az összes argumentum felhasználásával
a következő példa decseq nevű szekvenciát hoz létre a decimális adattípus használatával, amelynek tartománya 0-tól 255-ig terjed. A szekvencia 125-tel kezdődik, és minden egyes szám létrehozásakor 25-tel növekszik. Mivel a szekvencia úgy van konfigurálva, hogy ciklusba kerüljön, ha az érték meghaladja a maximális 200 értéket, a szekvencia a minimális 100 értéken újraindul.
CREATE SEQUENCE Test.DecSeq AS decimal(3,0) START WITH 125 INCREMENT BY 25 MINVALUE 100 MAXVALUE 200 CYCLE CACHE 3 ;
Az első érték megtekintéséhez hajtsa végre a következő utasítást; a START WITH
opció 125.
SELECT NEXT VALUE FOR Test.DecSeq;
hajtsa végre az utasítást még háromszor, hogy visszaadja a 150, 175 és 200 értéket.
hajtsa végre újra az utasítást, hogy lássa, hogyan tér vissza a kezdő érték aMINVALUE
100 opció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' ;
Lásd még
ALTER szekvencia (Transact-SQL)
csepp szekvencia (Transact-SQL)
következő érték (Transact-SQL)
szekvencia számok