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
A megadott szekvenciaobjektumból sorozatszámot generál.
A sorozatok létrehozásáról és használatáról szóló teljes körű elemzésért lásd: Sorozatszámok. Használd sp_sequence_get_range arra, hogy egy sorozatszám-tartományt generálj.
Transact-SQL szintaxis konvenciók
Szemantika
NEXT VALUE FOR [ database_name . ] [ schema_name . ] sequence_name
[ OVER (<over_order_by_clause>) ]
Arguments
database_name
Az adatbázis neve, amely tartalmazza a szekvencia objektumot.
schema_name
A sorozatobjektumot tartalmazó séma neve.
sequence_name
A számot generáló szekvenciaobjektum neve.
over_order_by_clause
Meghatározza a sorrendi sorrendben, amelyhez a sorok a partícióban vannak rendelve. További információ: OVER záradék (Transact-SQL).
Visszatérési típusok
A sorozat típusával egy számot ad vissza.
Megjegyzések
A KÖVETKEZŐ ÉRTÉK FÜGGVÉNY használható tárolt eljárásokban és triggerekben.
Amikor a NEXT VALUE FOR függvényt egy lekérdezésben vagy alapértelmezett korlátozásban használják, ha ugyanazt a sorozatobjektumot többször is használják, vagy ha ugyanazt a sorozatobjektumot használják mind az értékeket biztosító utasításban, mind egy végrehajtandó alapértelmezett korlátozásban, ugyanaz az érték visszatér minden olyan oszlopra, amely ugyanarra a sorozatra hivatkozik az eredményhalmazban egy sorban.
A KÖVETKEZŐ érték függvény nem determinisztika, és csak olyan kontextusokban engedélyezett, ahol a generált sorozatértékek száma jól definiált. Az alábbiakban bemutatjuk, hogy hány értéket fogunk használni minden hivatkozott szekvenciaobjektumhoz egy adott állításban:
SELECT – Minden hivatkozott szekvencia objektumhoz soronként egyszer generálnak új értéket az állítás eredményében.
BEHELYEZKEDJEN ... ÉRTÉKEK – Minden hivatkozott szekvenciaobjektumhoz minden beillesztett sorhoz egyszer új értéket generálnak az állításban.
FRISSÍTÉS – Minden hivatkozott szekvencia objektumhoz minden sorra új értéket generálnak, amelyet az utasítás frissít.
Procedurális állítások (például DECLARE, SET stb.) – Minden hivatkozott szekvencia objektumhoz új érték generálódik minden állításhoz.
Korlátozások és korlátozások
A KÖVETKEZŐ ÉRTÉK FÜGGVÉNY függvény nem használható az alábbi helyzetekben:
Amikor egy adatbázis csak olvasható módban van.
Egy táblaértékű függvényhez való argumentumként.
Egy aggregált függvény argumentjaként.
Allekérdezésekben, beleértve a gyakori táblázatkifejezéseket és a származtatott táblákat.
Nézetekben, felhasználó által definiált függvényekben vagy kiszámított oszlopokban.
Egy állításban, amely a DISTINCT, UNION, UNION ALL, EXCEPT vagy INTERSECT operátorokat használ.
Egy állításban, amely a ORDER BY klauzulatot használ, kivéve, ha KÖVETKEZŐ ÉRTÉK ...OVER (ORDER BY ...) használatban van.
A következő klaudekokban: FETCH, OVER, OUTPUT, ON, PIVOT,UNPIVOT, GROUP BY, HAVING, COMPUTE,COMPUTE BY, vagy FOR XML.
Feltételes kifejezésekben, amelyek CASE,CHOOSE, COALESCE, IIF, ISNULL vagy NULLIF funkciókat használnak.
Egy VALUES klauzuladékban, amely nem része az INSERT állításnak.
A csekk korlátozás definíciójában.
A szabály vagy alapértelmezett objektum definíciójában. (Alapértelmezett korlátozásban is használható.)
Alapértelmezett egy felhasználó által definiált táblatípusban.
Egy utasításban, amely TOP, OFFSET vagy amikor a ROWCOUNT opció be van állítva.
Egy állítás WHERE mellékmellékes mellékszálában.
Egy MERGE nyilatkozatban. (Kivéve, ha a NEXT VALUE FOR függvényt egy alapértelmezett korlátozásban használják a céltáblában, és az alapértelmezett a CREATE utasításban a MERGE utasításban.)
Egy szekvenciaobjektum használata alapértelmezett korlátozásban
Amikor a NEXT ÉRTÉKET HASZNÁLJUK alapértelmezett korlátozásban, a következő szabályok érvényesek:
Egyetlen sorozatobjektumra több táblában is hivatkozhat alapértelmezett korlátokból.
A táblának és a szekvencia objektumnak ugyanabban az adatbázisban kell lennie.
Az alapértelmezett korlátozást hozzáadó felhasználónak REFERENCES jogosultsággal kell rendelkeznie a szekvencia objektumon.
Egy alapértelmezett korlátozásból származó szekvenciaobjektumot nem lehet elhagyni, amíg az alapértelmezett korlátozás el nem kerül.
Ugyanaz a sorszám jelenik meg minden oszlopra a sorban, ha több alapértelmezett feltétel ugyanazt a szekvenciaobjektumot használja, vagy ha ugyanazt a sorozat objektumot használják mind az értékeket biztosító utasításban, mind egy végrehajtandó alapértelmezett korlátozásban.
Az alapértelmezett korlátozásban a NEXT VALUE FOR függvényre mutató hivatkozások nem tudják megadni az OVER klauzulát.
Egy alapértelmezett korlátozásban hivatkozott sorozatobjektum módosítható.
Az
INSERT ... SELECTorINSERT ... EXECutasítás esetén, ahol az adat egy ORDER BY klauzulával rendelkező lekérdezésből származik, a NEXT VALUE FOR függvény által visszaadott értékek a ORDER BY klauzula által meghatározott sorrendben generálódnak.
Egy sorozatobjektum használata OVER-ORDER by Clause-val
A NEXT VALUE FOR függvény támogatja a rendezett sorozatértékek generálását azáltal, hogy az OVER klauzulát alkalmazzuk a NEXT VALUE FOR hívásra. Az OVER klauzula használatával a felhasználó garantáltan biztosíthatja, hogy a visszaadott értékek az OVER klaulauzula ORDER BY alklauzulájának sorrendjében generálódnak. A következő további szabályok érvényesek, ha a NEXT VALUE FOR függvényt az OVER klauzulával használjuk:
Ugyanazon sorozatgenerátor NEXT VALUE FOR függvényére egyetlen állításban több hívásnak ugyanazt az OVER klauzula definícióját kell használnia.
A NEXT VALUE FOR függvényre szóló többszöri hívás, amelyek egyetlen állításban különböző szekvenciagenerátorokra hivatkoznak, eltérő OVER záradék definícióval rendelkezhetnek.
Az OVER klauzula, amelyet a NEXT ÉRTÉK FOR függvényre alkalmaznak, nem támogatja a PARTITION BY alzáradékot.
Ha az SELECT utasítás minden hívása a NEXT VALUE FOR függvényre megadja az OVER klauzulát, akkor a ORDER BY klauzulát is lehet használni a SELECT utasításban.
Az OVER klauzula engedélyezett a NEXT VALUE FOR függvényrel, ha egy SELECT utasításban vagy
INSERT ... SELECT ...állításban használják. Az OVER záradék használata a NEXT VALUE FOR függvényrel nem engedélyezett UPDATE vagy MERGE utasításokban.Ha egy másik folyamat egyszerre éri el a szekvencia objektumot, a visszaküldött számok között lehetnek hézag.
Metadaták
A szekvenciákról információért kérdezze le a sys.sequences katalógus nézetét.
Biztonság
Permissions
FRISSÍTÉS engedélyt igényel a szekvencia objektumára vagy a szekvencia sémájára. Az engedély megadásának példáját lásd az F példát a téma későbbi részében.
Tulajdonláncolás
A szekvencia objektumok támogatják a tulajdonjog láncolását. Ha a szekvencia objektumnak ugyanaz a tulajdonosa, mint a hívó tárolt eljárás, trigger vagy tábla (alapértelmezett korlátozásként egy sorozatobjektum van), akkor nem szükséges engedélyellenőrzés a szekvencia objektumra. Ha a szekvencia objektum nem ugyanaz a felhasználó tulajdona, mint a hívó tárolt eljárás, trigger vagy tábla, akkor engedélyellenőrzés szükséges a szekvencia objektumon.
Amikor a NEXT VALUE FOR függvényt alapértelmezett értékként használják egy táblázatban, a felhasználóknak INSERT engedélyre van szükségük a táblán, valamint UPDATE engedélyre a szekvencia objektumon, hogy az adat alapértelmezett használatával beilleszthetők.
Ha az alapértelmezett korlátozásnak ugyanaz a tulajdonosa van, mint a szekvencia objektumnak, akkor az alapértelmezett korlátozás hívása esetén nem szükséges jogosultságok a szekvencia objektumhoz.
Ha az alapértelmezett korlátozás és a szekvencia objektum nem ugyanaz a felhasználó tulajdona, akkor a szekvencia objektumra engedélyek akkor is, ha az alapértelmezett korlátozáson keresztül hívják meg.
Audit
A KÖVETKEZŐ ÉRTÉK FÜGGVÉNY auditálásához figyeld a SCHEMA_OBJECT_ACCESS_GROUP.
Példák
Példákért mind sorozatok létrehozására, mind a NEXT VALUE FOR függvény használatára a sorozatszámok generálásához, lásd: Sorozatszámok.
Az alábbi példák egy sémában nevet CountBy1Testhasználnak . A következő utasítást hajtsd végre a sorozat létrehozásához Test.CountBy1 . A C és E példák az AdventureWorks2025 adatbázist használják, így a CountBy1 sorozat abban az adatbázisban jön létre.
USE AdventureWorks2022;
GO
CREATE SCHEMA Test;
GO
CREATE SEQUENCE Test.CountBy1
START WITH 1
INCREMENT BY 1 ;
GO
A. Egy szekvencia használata egy select állításban
A következő példa egy olyan sorozatot hoz létre, amely CountBy1 minden használatkor egy-eggyel nő.
SELECT NEXT VALUE FOR Test.CountBy1 AS FirstUse;
SELECT NEXT VALUE FOR Test.CountBy1 AS SecondUse;
Itt van az eredmények összessége.
FirstUse
1
SecondUse
2
B. Egy változó beállítása a következő sorozat értékére
Az alábbi példa három módot mutat be arra, hogyan lehet egy változót a következő sorszám értékére állítani.
DECLARE @myvar1 BIGINT = NEXT VALUE FOR Test.CountBy1
DECLARE @myvar2 BIGINT ;
DECLARE @myvar3 BIGINT ;
SET @myvar2 = NEXT VALUE FOR Test.CountBy1 ;
SELECT @myvar3 = NEXT VALUE FOR Test.CountBy1 ;
SELECT @myvar1 AS myvar1, @myvar2 AS myvar2, @myvar3 AS myvar3 ;
GO
C. Rangsorolási ablak függvényű sorozat használata
USE AdventureWorks2022;
GO
SELECT NEXT VALUE FOR Test.CountBy1 OVER (ORDER BY LastName) AS ListNumber,
FirstName, LastName
FROM Person.Contact ;
GO
D. A NEXT ÉRTÉK FOR függvény használata az alapértelmezett korlátozás definíciójában
Támogatott a NEXT VALUE FOR függvény használata az alapértelmezett korlátozás definíciójában. A NEXT VALUE használatának példája egy CREATE TABLE utasításban lásd: Example CSequence Numbers. A következő példa ALTER TABLE egy szekvencia alapértelmezett hozzáadására szolgál egy aktuális táblához.
CREATE TABLE Test.MyTable
(
IDColumn NVARCHAR(25) PRIMARY KEY,
name VARCHAR(25) NOT NULL
) ;
GO
CREATE SEQUENCE Test.CounterSeq
AS INT
START WITH 1
INCREMENT BY 1 ;
GO
ALTER TABLE Test.MyTable
ADD
DEFAULT N'AdvWorks_' +
CAST(NEXT VALUE FOR Test.CounterSeq AS NVARCHAR(20))
FOR IDColumn;
GO
INSERT Test.MyTable (name)
VALUES ('Larry') ;
GO
SELECT * FROM Test.MyTable;
GO
E. A NEXT VALUE FOR függvény használata egy INSERT állításban
A következő példa létrehoz egy táblát néven TestTable , majd a NEXT VALUE FOR függvény segítségével egy sor beillesztése.
CREATE TABLE Test.TestTable
(CounterColumn INT PRIMARY KEY,
Name NVARCHAR(25) NOT NULL) ;
GO
INSERT Test.TestTable (CounterColumn,Name)
VALUES (NEXT VALUE FOR Test.CountBy1, 'Syed') ;
GO
SELECT * FROM Test.TestTable;
GO
E. A KÖVETKEZŐ ÉRTÉK FOR függvény használata SELECT ... BA
A következő példa a SELECT ... INTO következő utasítást használja egy névnevű Production.NewLocation tábla létrehozásához, és a NEXT VALUE FOR függvényt használja a sorok számozására.
USE AdventureWorks2022;
GO
SELECT NEXT VALUE FOR Test.CountBy1 AS LocNumber, Name
INTO Production.NewLocation
FROM Production.Location ;
GO
SELECT * FROM Production.NewLocation ;
GO
F. Engedély megadása a NEXT VALUE FOR végrehajtásához
A következő példa FRISSÍTÉS engedélyt ad egy felhasználónevű AdventureWorks\Larry engedélynek, hogy a NEXT VALUE FOR sorozat segítségével végrehajtsa a Test.CounterSeq játékot.
GRANT UPDATE ON OBJECT::Test.CounterSeq TO [AdventureWorks\Larry] ;
Lásd még:
CREATE SEQUENCE (Transact-SQL)
ALTER SEQUENCE (Transact-SQL)
sorszámok