Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Microsoft Fabric'te SQL veritabanı
Belirtilen dizi nesnesinden bir dizi numarası oluşturur.
Hem dizilerin oluşturulması hem de kullanımı hakkında kapsamlı bir tartışma için bkz. Dizi Sayıları. sp_sequence_get_range kullanarak bir dizi numarası aralığında rezerv oluşturun.
Transact-SQL söz dizimi kuralları
Sözdizimi
NEXT VALUE FOR [ database_name . ] [ schema_name . ] sequence_name
[ OVER (<over_order_by_clause>) ]
Arguments
database_name
Dizi nesnesini içeren veritabanının adı.
schema_name
Dizi nesnesini içeren şemanın adı.
sequence_name
Sayı üreten dizi nesnesinin adı.
over_order_by_clause
Bir bölümdeki satırlara sıralar değerinin ne kadar atanındığını belirler. Daha fazla bilgi için bkz. OVER Maddesi (Transact-SQL).
Dönüş Türleri
Dizinin türü kullanılarak bir sayı döndürür.
Açıklamalar
NEXT VALUE FOR fonksiyonu depolanmış prosedürlerde ve tetikleyicilerde kullanılabilir.
Bir sorgu veya varsayılan kısıtlamada NEXT VALUE FOR fonksiyonu kullanıldığında, aynı dizi nesnesi birden fazla kez kullanılırsa veya aynı dizi nesnesi hem değerleri sağlayan ifadede hem de yürütülen varsayılan kısıtlamada kullanılırsa, sonuç kümesinde bir satır içindeki aynı diziye referans veren tüm sütunlar için aynı değer döner.
NEXT DEĞERİ fonksiyonu belirsizdir ve yalnızca üretilen dizi değerlerinin sayısı iyi tanımlanmış olan bağlamlarda izin verilir. Aşağıda, verilen bir ifadede her referans verilen dizi nesnesi için kaç değer kullanılacağına dair tanım verilmiştir:
SELECT - Her referans verilen dizi nesnesi için, ifadenin sonucunda her satır başına bir yeni değer oluşturulur.
INSERT ... VALUES - Her referans verilen dizi nesnesi için, ifadede eklenen her satır için bir kez yeni bir değer üretilir.
GÜNCELLEME - Her referans verilen dizi nesnesi için, ifadenin güncellediği her satır için yeni bir değer oluşturulur.
Prosedürel ifadeler ( örneğin DECLARE, SET vb.) - Her referans verilen dizi nesnesi için, her ifade için yeni bir değer üretilir.
Sınırlamalar ve Kısıtlamalar
NEXT DEĞERİ fonksiyonu aşağıdaki durumlarda kullanılamaz:
Bir veritabanı yalnızca okuma modundayken.
Tablo değerli bir fonksiyona argüman olarak.
Bir toplu fonksiyona argüman olarak.
Ortak tablo ifadeleri ve türeme tabloları içeren alt sorgularda.
Görünümlerde, kullanıcı tanımlı fonksiyonlarda veya hesaplanan sütunlarda.
DISTINCT,UNION, UNION ALL, EXCEPT veya INTERSECT operatörlerini kullanan bir ifadede.
ORDER BY maddesini kullanan bir ifadede, NEXT VALUE for ... OVER (ORDER BY ...) kullanılır.
Aşağıdaki cümlelerde: FETCH, OVER, OUTPUT, ON, PIVOT,UNPIVOT, GROUP BY, HAVING, COMPUTE,COMPUTE BY veya FOR XML.
Koşullu ifadelerde CASE, CHOOSE, COALESCE, IIF, ISNULL veya NULLIF kullanılır.
VALUE maddesinde , bu bir INSERT ifadesinin parçası değildir.
Bir kontrol kısıtlaması tanımında.
Kural veya varsayılan nesne tanımında. (Varsayılan bir kısıtlamada kullanılabilir.)
Kullanıcı tanımlı bir tablo türünde varsayılan olarak.
TOP, OFFSET veya ROWCOUNT seçeneği ayarlandığında bir ifadede
Bir ifadenin WHERE maddesinde.
MERGE açıklamasında. (Hedef tabloda varsayılan bir kısıtlamada NEXT VALUE FOR fonksiyonu kullanıldığında ve MERGE ifadesinin CREATE ifadesinde varsayılan olarak kullanıldığı durumlar hariç.)
Varsayılan Kısıtlamada Bir Dizi Nesnesinin Kullanımı
Varsayılan kısıtlamada NEXT DEĞERİ fonksiyonu kullanılırken, aşağıdaki kurallar geçerlidir:
Tek bir dizi nesnesi, birden fazla tablodaki varsayılan kısıtlamalardan referans verilebilir.
Tablo ve dizi nesnesi aynı veritabanında bulunmalıdır.
Varsayılan kısıtlamayı ekleyen kullanıcı, dizi nesnesi üzerinde REFERENCES iznine sahip olmalıdır.
Varsayılan kısıtlamadan referans alınan bir dizi nesnesi, varsayılan kısıtlama kaldırılmadan önce bırakılamaz.
Aynı sıra, birden fazla varsayılan kısıtlama aynı dizi nesnesini kullanıyorsa veya aynı dizi nesnesi hem değerleri sağlayan ifadede hem de yürütülen varsayılan kısıtlamada kullanılıyorsa, satırdaki tüm sütunlar için aynı sıralar numarası döner.
Varsayılan kısıtlamada NEXT VALUE FOR fonksiyonuna yapılan referanslar OVER maddesini belirtemez.
Varsayılan bir kısıtlamada referans verilen bir dizi nesnesi değiştirilebilir.
Bir
INSERT ... SELECTveyaINSERT ... EXECifadesi durumunda, eklenen veri ORDER BY cümlesi kullanılarak yapılan bir sorgudan gelirse, NEXT VALUE FOR fonksiyonunun döndürdüğü değerler ORDER BY maddesinin belirttiği sırayla oluşturulur.
Bir Sıra Nesnesinin Bir Madde Üzerinde Bir Madde Ile Bir Sıra Varlığının Kullanımı
NEXT VALUE FOR fonksiyonu, OVER cümlesinin NEXT VALUE FOR çağrısına uygulanarak sıralanmış dizi değerleri oluşturulmasını destekler. OVER maddesi kullanılarak, kullanıcı döndürülen değerlerin OVER maddesinin ORDER BY alt köşesi sırasına göre üretildiği garanti altına alınır. OVER maddesiyle birlikte NEXT VALUE FOR fonksiyonu kullanılırken aşağıdaki ek kurallar geçerlidir:
Aynı sıralar üreteci için tek bir ifadede NEXT VALUE FOR fonksiyonuna yapılan birden fazla çağrı, aynı OVER cümlesi tanımını kullanmalıdır.
Tek bir ifadede farklı sıralar üreteçlerine referans veren NEXT VALUE FOR fonksiyonuna birden fazla çağrı, farklı OVER cümlesi tanımlarına sahip olabilir.
NEXT VALUE for fonksiyonuna uygulanan OVER maddesi, PARTITION BY alt cümlesini desteklemez.
Bir SELECT ifadesindeki NEXT VALUE FOR fonksiyonuna yapılan tüm çağrılar OVER maddesini belirtiyorsa, SELECT ifadesinde bir ORDER BY maddesi kullanılabilir.
OVER maddesi, bir SELECT ifadesi veya ifadesinde kullanıldığında
INSERT ... SELECT ...fonksiyonuyla birlikte izin verilir. OVER maddesininNEXT VALUE FOR fonksiyonuyla birlikte kullanılması UPDATE veya MERGE ifadelerinde yasaktır.Başka bir süreç aynı anda dizi nesnesine erişiyorsa, döndürülen sayılarda boşluklar olabilir.
Meta veriler
Diziler hakkında bilgi için sys.sequences katalog görünümünü sorgulayın.
Security
Permissions
Dizis nesnesi veya dizinin şeması üzerinde GÜNCELLEME izni gerektirir. İzin verme örneği için bu konunun ilerleyen bölümlerinde F örneğine bakınız.
Sahiplik Zincirleme
Dizi nesneleri sahiplik zincirlemesini destekler. Eğer dizi nesnesi, çağrılan depolanmış prosedür, tetikleme veya tablo ile aynı sahipse (varsayılan kısıtlama olarak bir dizi nesnesi varsa), dizis nesnesi üzerinde izin kontrolü gerekmez. Eğer dizi nesnesi, çağrı edilen depolanmış prosedür, tetikleyici veya tablo ile aynı kullanıcıya ait değilse, dizis nesnesi üzerinde izin kontrolü gereklidir.
Bir tabloda varsayılan değer olarak NEXT VALUE FOR fonksiyonu kullanıldığında, kullanıcılar varsayılan olarak veri eklemek için hem tabloya INSERT iznine hem de sıralı nesneye UPDATE iznine ihtiyaç duyar.
Varsayılan kısıtlama dizis nesnesiyle aynı sahibiyse, varsayılan kısıtlama çağrıldığında dizis nesnesine izin gerekmez.
Varsayılan kısıtlama ve dizi nesnesi aynı kullanıcıya ait değilse, dizis nesnesi varsayılan kısıtlama üzerinden çağrılsa bile izinler gereklidir.
Audit
NEXT VALUE for fonksiyonunu denetlemek için SCHEMA_OBJECT_ACCESS_GROUP izleyin.
Örnekler
Hem dizi oluşturma hem de NEXT VALUE FOR fonksiyonunun kullanılarak dizi numaraları üretmeye örnekleri için bkz. Dizi Numaraları.
Aşağıdaki örnekler, bir şemada adlandırılmış CountBy1bir diziyi Test kullanır. Diziyi Test.CountBy1 oluşturmak için aşağıdaki ifadeyi çalıştırın. C ve E örnekleri veritabanını AdventureWorks2025 kullanır, bu yüzden dizis CountBy1 o veritabanında oluşturulur.
USE AdventureWorks2022;
GO
CREATE SCHEMA Test;
GO
CREATE SEQUENCE Test.CountBy1
START WITH 1
INCREMENT BY 1 ;
GO
A. Bir select ifadesinde bir dizinin kullanılması
Aşağıdaki örnek, her kullanıldığında bir oran artan bir dizi oluşturur CountBy1 .
SELECT NEXT VALUE FOR Test.CountBy1 AS FirstUse;
SELECT NEXT VALUE FOR Test.CountBy1 AS SecondUse;
Sonuç kümesi aşağıdadır.
FirstUse
1
SecondUse
2
B. Bir değişkeni bir sonraki dizi değerine ayarlamak
Aşağıdaki örnek, bir değişkeni bir dizi numarasının sonraki değerine ayarlamanın üç yolunu göstermektedir.
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ıralama penceresi fonksiyonu olan bir dizinin kullanımı
USE AdventureWorks2022;
GO
SELECT NEXT VALUE FOR Test.CountBy1 OVER (ORDER BY LastName) AS ListNumber,
FirstName, LastName
FROM Person.Contact ;
GO
D. varsayılan kısıtlama tanımında NEXT VALUE FOR fonksiyonunun kullanılması
Varsayılan kısıtlama tanımında NEXT VALUE FOR fonksiyonunun kullanılması desteklenmektedir.
CREATE TABLE ifadesinde NEXT VALUE FOR kullanılma örneği için Örnek CSıra Numaralarına bakınız. Aşağıdaki örnek, mevcut bir tabloya varsayılan olarak bir diziyi eklemek için kullanılır ALTER TABLE .
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. INSERT ifadesinde NEXT VALUE FOR fonksiyonunun kullanılması
Aşağıdaki örnek, adında TestTable bir tablo oluşturur ve ardından bu NEXT VALUE FOR fonksiyonu kullanarak bir satır ekler.
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. SELECT fonksiyonu ile NEXT VALUE FOR kullanılarak ... İÇİNE
Aşağıdaki örnek, bir tablo oluşturmak SELECT ... INTO için bu Production.NewLocation ifadeyi kullanır ve her satırı numaralandırmak için fonksiyon kullanırNEXT VALUE FOR.
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. NEXT VALUE için çalıştırma izni veriliyor
Aşağıdaki örnek, bir kullanıcı adında bir diziyi AdventureWorks\Larry kullanarak çalıştırma NEXT VALUE FORTest.CounterSeq izni verir.
GRANT UPDATE ON OBJECT::Test.CounterSeq TO [AdventureWorks\Larry] ;
Ayrıca Bkz.
CREATE SEQUENCE (Transact-SQL)
DEĞIŞEN DIZİSİ (Transact-SQL)
sıra numaralarını