Share via


SONRAKİ değeri (Transact-sql)

Bir sıra numarası belirtilen sıra nesnesi oluşturur.

Tam bir tartışma hem oluşturmak hem de dizileri kullanarak bilgi için bkz: Sıra numaraları. Kullanım sp_sequence_get_range üretmek için sıra numaraları aralığı.

Konu bağlantısı simgesi Transact-SQL Sözdizim Kuralları

Sözdizimi

NEXT VALUE FOR [ database_name . ] [ schema_name . ]  sequence_name
   [ OVER (<over_order_by_clause>) ]

Bağımsız değişkenler

  • database_name
    Sıra nesnesi içeren veritabanının adı.

  • schema_name
    Sıra nesnesi içeren şema adı.

  • sequence_name
    Sayı üreten sıra nesnenin adı.

  • over_order_by_clause
    Sıra değeri bir bölümündeki satırların atandığı sırayı belirler. Daha fazla bilgi için, bkz. Yan (Transact-sql).

Dönüş Türleri

Sıra türü kullanarak sayıyı verir.

Açıklamalar

NEXT VALUE FORİşlev saklı yordamları ve Tetikleyicileri kullanılabilir.

Ne zaman NEXT VALUE FORaynı sıra nesnesi ise her ikisini de değerleri sağlama deyiminde kullanılan aynı sıra nesnesi birden fazla kez kullanılır ve varsayılan kısıtlama yürütülmekte, sonuç kümesi bir satır içinde aynı sıra başvuran tüm sütunlar için aynı değeri döndürülür, işlevini bir sorgu veya default kısıtlaması kullanılır.

NEXT VALUE FORİşlevi nondeterministic ve yalnızca burada oluşturulan sıra değerleri iyi tanımlanmış bağlamlarda izin. Kaç değerleri belirtilen açıklamada her başvurulan sıra nesnesi için kullanılan tanımı aşağıdadır:

  • SELECT-Her başvurulan sıra nesnesi için yeni bir değer sonuç deyimi satır başına bir kez oluşturulur.

  • INSERT… VALUES-Her başvurulan sıra nesnesi için yeni bir değer bir kez her eklenen satır deyimi oluşturulur.

  • UPDATE-Her başvurulan sıra nesnesi için yeni bir değer deyim tarafından güncelleştirilen her satır için oluşturulur.

  • Yordam deyimleri (gibi DECLARE, SET, vb)-her başvurulan sıra nesnesi için yeni bir değer her tablo için oluşturulur.

Sınırlamalar ve Kısıtlamalar

NEXT VALUE FORİşlevi aşağıdaki durumlarda kullanılır:

  • Veritabanı salt okunur modda olduğunda.

  • Bir tablo değerli işlev bağımsız değişkeni.

  • Bir toplama işlevi bağımsız değişkeni.

  • Türetilen tablolar ve ortak tablo ifadeleri dahil alt sorgular içinde.

  • Görünümleri, kullanıcı tanımlı işlevler veya hesaplanmış sütunları.

  • Bir using ifadesi içinde DISTINCT, UNION, UNION ALL, EXCEPTya INTERSECToperatör.

  • Bir using ifadesi içinde ORDER BYyan tümcesi sürece NEXT VALUE FOR...OVER (ORDER BY …) is used.

  • In the following clauses: FETCH, OVER, OUTPUT, ON, PIVOT, UNPIVOT, GROUP BY, HAVING, COMPUTE, COMPUTE BY, or FOR XML.

  • In conditional expressions using CASE, CHOOSE, COALESCE, IIF, ISNULL, or NULLIF.

  • İçinde bir VALUESdeğil yan tümcesinin parçası bir INSERTdeyimi.

  • Check kısıtlaması tanımı içinde.

  • Bir kuralı veya varsayılan nesnesi tanımında. (Bu varsayılan kısıtlama kullanılabilir.)

  • Varsayılan olarak kullanıcı tanımlı tablo türü.

  • Bir using ifadesi içinde TOP, OFFSET, ya da ne zaman ROWCOUNTseçeneği ayarlanır.

  • De WHEREdeyiminin yan.

  • In a MERGEdeyimi. (Dışında ne zaman NEXT VALUE FORişlevi, hedef tablodaki varsayılan kısıtlama kullanılır ve varsayılan olarak kullanılan CREATEstatement of MERGEdeyimi.)

Bir sıra nesnesi varsayılan kısıtlama kullanma

Kullanırken NEXT VALUE FORişlevi varsayılan kısıtlama, aşağıdaki kurallar geçerlidir:

  • Bir tek sıra nesnesinin varsayılan sınırlamalar içinde birden çok tablo başvurulan.

  • Tablo ve sıra nesne aynı veritabanında bulunması gerekir.

  • Varsayılan kısıtlama ekleme kullanıcı sıra nesne başvurular izninizin olması gerekir.

  • Varsayılan kısıtlama kesilmeden önce default kısıtlaması başvurulan bir sıra nesnesi bırakılan olamaz.

  • Aynı sıra numarası, tüm sütunların bir satırda birden çok varsayılan kısıtlamalar aynı sıra nesne veya aynı sıra nesnesi değerleri sağlama deyimi hem de yürütülmekte olan varsayılan kısıtlama kullanılırsa döndürülür.

  • İçin başvuran NEXT VALUE FORdefault kısıtlaması işlevinde belirtemezsiniz OVERtümcesi.

  • Varsayılan kısıtlama başvurulan bir sıra nesnesi değiştirilebilir.

  • Durumda bir INSERT … SELECTya INSERT … EXECeklenen veriler nerede gelir bir sorgu kullanarak deyimi bir ORDER BYyan tümcesi, tarafından döndürülen değerler NEXT VALUE FORişlevi oluşturulan tarafından belirtilen sırada ORDER BYyan.

İle fazla bir sıra nesnesi kullanarak yan tümcesi sipariş

NEXT VALUE FORİşlevi destekler uygulayarak sıralanmış sıra değerler üreten OVERyan NEXT VALUE FORçağrısı. Kullanarak OVERyan tümcesi, bir kullanıcı garanti verilen değerlerin sırasına göre oluşturulan OVERyan 's ORDER By subclause. Kullanırken aşağıdaki ek kurallar uygulanır NEXT VALUE FORbirlikte OVERfıkra:

  • Çoklu aramaları için NEXT VALUE FORişlev için tek bir deyimi içinde aynı sıra Jeneratör tüm aynı kullanmalısınız OVERyan tümcesi tanımı.

  • Çoklu aramaları için NEXT VALUE FORişlev başvurusu farklı sıra jeneratörler tek bir deyimi içinde farklı olabilir OVERyan tümcesi tanımları.

  • Bir OVERuygulanan yan NEXT VALUE FORişlevi desteklemez PARTITION BYalt yan.

  • Tüm aramaları için NEXT VALUE FORolarak işlev bir SELECTdeyimi belirtir OVERyan tümcesi, bir ORDER BYyan tümcesi içinde kullanılabilir SELECTdeyimi.

  • OVERYan tümcesi ile izin verilir NEXT VALUE FORişlevi kullanıldığında bir SELECTdeyimi veya INSERT … SELECT …deyimi. NEXT VALUE FORİşlev içinde izin verilmez UPDATEya MERGEdeyimleri.

  • Başka bir işlem sırası nesneyi aynı anda erişiyorsa, döndürülen sayılar boşluklar olabilir.

Meta veri

Serileri hakkında daha fazla bilgi için sorgu sys.sequences Katalog görünümü.

Güvenlik

İzinler

Gerektirir UPDATEsıra nesne veya sıra Şema izni. İzin verme konusunda bir örnek için bkz: örnek f bu başlık altında.

Sahipliği zincirleme

Sıra nesneleri destek sahipliği zincir. Sıra nesnesi aynı sahibini arayan saklı yordamı, tetikleyici veya (sahip bir sıra nesnesi, varsayılan kısıtlama) tablo varsa, hiçbir izin onay sıra nesne gerekiyor. Sıra nesnesi aynı kullanıcının arama saklı yordamı, tetikleyici veya tablo sahibi değil, izin onay sıra nesne gerekiyor.

Ne zaman NEXT VALUE FORişlevi bir tabloda varsayılan değer olarak kullanılır, hem de kullanıcı istemek INSERTizni tablosundaki, ve UPDATEsıra nesnesinin varsayılan kullanarak veri ekleme izni.

  • Varsayılan kısıtlama sıra nesneyle aynı sahibi varsa, varsayılan kısıtlama çağrıldığında sıra nesne üzerinde hiçbir izinleri gereklidir.

  • Aynı kullanıcı tarafından varsayılan kısıtlama ve sıra nesne sahibi değil, varsayılan kısıtlama denir bile sıra nesne üzerinde izinleri gereklidir.

Denetim

Denetlenecek NEXT VALUE FORişlevi, monitör schema_object_access_group.

Örnekler

Sıraları oluşturma ve kullanma örnekleri Sonraki değer için sıra numaraları oluşturmak için bkz: işlev Sıra numaraları.

Adlı bir sıra aşağıdaki örnekleri kullanın CountBy1adlı bir şemada Test. Oluşturmak için aşağıdaki deyimi yürütme Test.CountBy1sıra. Örnekler c ve e kullanımı AdventureWorks2012 veritabanı, yani CountBy1sıra bu veritabanında oluşturulur.

USE AdventureWorks2012 ;
GO

CREATE SCHEMA Test;
GO

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

USE AdventureWorks2012 ;
GO

CREATE SCHEMA Test;
GO

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

A.Select deyimi içinde bir dizi kullanarak

Aşağıdaki örnek, adlı bir sıra oluşturur CountBy1artıracağını tarafından o her kullanılışında.

SELECT NEXT VALUE FOR Test.CountBy1 AS FirstUse;
SELECT NEXT VALUE FOR Test.CountBy1 AS SecondUse;

SELECT NEXT VALUE FOR Test.CountBy1 AS FirstUse;
SELECT NEXT VALUE FOR Test.CountBy1 AS SecondUse;

Sonuç kümesi buradadır.

FirstUse

1

SecondUse

2

B.Bir değişkeni sonraki sıra değerine ayarlanması

Aşağıdaki örnek bir değişken için bir sıra numarası sonraki değerini ayarlamak için üç yol gösteriyor.

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

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.Sırası ile bir sıralama kullanarak penceresi işlevi

USE AdventureWorks2012 ;
GO

SELECT NEXT VALUE FOR Test.CountBy1 OVER (ORDER BY LastName) AS ListNumber,
    FirstName, LastName
FROM Person.Contact ;
GO

USE AdventureWorks2012 ;
GO

SELECT NEXT VALUE FOR Test.CountBy1 OVER (ORDER BY LastName) AS ListNumber,
    FirstName, LastName
FROM Person.Contact ;
GO

D.Default kısıtlaması tanımında sonraki değeri için işlevini kullanma

Kullanarak NEXT VALUE FORdefault kısıtlaması tanımında işlevi desteklenmektedir. Kullanarak örnek için NEXT VALUE FORde bir CREATE TABLEbildirimi bkz: örnek cSıra numaraları. Aşağıdaki örnek ALTER TABLEsırası, varsayılan olarak geçerli tabloya eklemek.

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

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.SONRAKİ değeri için işlevi bir INSERT deyimi kullanarak

Aşağıdaki örnek, adlı bir tablo oluşturur TestTableve NEXT VALUE FORbir satır eklemek için işlevi.

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

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.SONRAKİ değeri için işlevi ile kullanma... İÇİNE

Aşağıdaki örnek SELECT … INTOadlı bir tablo oluşturmak için ifade Production.NewLocationve NEXT VALUE FOR işlevi her satır sayısı için.

USE AdventureWorks2012 ; 
GO

SELECT NEXT VALUE FOR Test.CountBy1 AS LocNumber, Name 
    INTO Production.NewLocation
    FROM Production.Location ;
GO

SELECT * FROM Production.NewLocation ;
GO

USE AdventureWorks2012 ; 
GO

SELECT NEXT VALUE FOR Test.CountBy1 AS LocNumber, Name 
    INTO Production.NewLocation
    FROM Production.Location ;
GO

SELECT * FROM Production.NewLocation ;
GO

F.SONRAKİ değeri için yürütme izni verme

Aşağıdaki örnek UPDATEadlı bir kullanıcı izni AdventureWorks\Larryyürütme izni NEXT VALUE FORkullanarak Test.CounterSeqsıra.

GRANT UPDATE ON OBJECT::Test.CounterSeq TO [AdventureWorks\Larry] ;

GRANT UPDATE ON OBJECT::Test.CounterSeq TO [AdventureWorks\Larry] ;

Ayrıca bkz.

Başvuru

SIRA (Transact-sql) oluştur

alter SIRASI (Transact-sql)

Kavramlar

Sıra numaraları