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


KÖVETKEZŐ ÉRTÉK (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példánySQL-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 ... SELECT or INSERT ... EXEC utasí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