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ı
Bir dizi nesnesi oluşturur ve özelliklerini belirtir. Sıra, sıranın oluşturulduğu belirtime göre sayısal değerler dizisi oluşturan kullanıcı tanımlı şema bağlı nesnesidir. Sayısal değerler dizisi, tanımlı bir aralıkta artan veya azalan sırada oluşturulur ve tükendiğinde yeniden başlatılacak (döngü) yapılandırılabilir.
Diziler, kimlik sütunlarından farklı olarak belirli tablolarla ilişkili değildir. Uygulamalar bir sonraki değerini almak için bir dizi nesnesine başvurur. Diziler ve tablolar arasındaki ilişki uygulama tarafından denetlenir. Kullanıcı uygulamaları bir dizi nesnesine başvurabilir ve değerleri birden çok satır ve tablo arasında koordine edebilir.
Satırlar eklendiğinde oluşturulan kimlik sütunları değerlerinin aksine, bir uygulama NEXT VALUE FOR çağrısı yaparak satırı eklemeden sonraki sıra numarasını alabilir. Aynı anda birden çok sıra numarası almak için sp_sequence_get_range kullanın.
Hem hem de CREATE SEQUENCE işlevini kullanan bilgi ve NEXT VALUE FOR senaryolar için bkz . Sıra Numaraları.
Transact-SQL söz dizimi kuralları
Sözdizimi
CREATE SEQUENCE [ schema_name . ] sequence_name
[ AS [ built_in_integer_type | user-defined_integer_type ] ]
[ START WITH <constant> ]
[ INCREMENT BY <constant> ]
[ { MINVALUE [ <constant> ] } | { NO MINVALUE } ]
[ { MAXVALUE [ <constant> ] } | { NO MAXVALUE } ]
[ CYCLE | { NO CYCLE } ]
[ { CACHE [ <constant> ] } | { NO CACHE } ]
[ ; ]
Arguments
sequence_name
Dizinin veritabanında bilindiği benzersiz adı belirtir. Tür sysname'dir.
[ built_in_integer_type | kullanıcı-defined_integer_type ]
Bir dizi herhangi bir tamsayı türü olarak tanımlanabilir. Aşağıdaki türlere izin verilir.
- tinyint - Aralık 0 - 255
- smallint - Aralık -32.768 - 32.767
- int - Aralık -2.147.483.648 - 2.147.483.647
- bigint - Aralık -9.223.372.036.854.775.808 - 9.223.372.036.854.775.807
- ondalık ve 0 ölçeğine sahip sayısal .
- İzin verilen türlerden birini temel alan kullanıcı tanımlı veri türleri (diğer ad türü).
Veri türü sağlanmadıysa , bigint veri türü varsayılan olarak kullanılır.
START WITH <sabiti>
Sıra nesnesi tarafından döndürülen ilk değer. Değer, START en büyük değerden küçük veya buna eşit ve dizi nesnesinin en düşük değerinden büyük veya buna eşit bir değer olmalıdır. Yeni bir sıra nesnesi için varsayılan başlangıç değeri, artan bir sıra nesnesi için en düşük değer ve azalan bir sıra nesnesi için en büyük değerdir.
INCREMENT BY <sabiti>
İşleve yapılan her çağrı için sıralı nesnenin değerini artırmak (veya negatifse azaltmak) için NEXT VALUE FOR kullanılan değer. Artış negatif bir değerse, sıra nesnesi azalandır; aksi takdirde, artan olur. Artış 0 olamaz. Yeni bir sıralı nesne için varsayılan artış 1'dir.
[ MINVALUE <sabiti> | MINVALUE YOK ]
Sıralı nesnenin sınırlarını belirtir. Yeni bir sıra nesnesi için varsayılan en düşük değer, dizi nesnesinin veri türünün en düşük değeridir. Bu, tinyint veri türü için sıfır ve diğer tüm veri türleri için negatif bir sayıdır.
[ MAXVALUE <sabiti> | MAXVALUE YOK
Sıralı nesnenin sınırlarını belirtir. Yeni bir sıra nesnesi için varsayılan en yüksek değer, sıralı nesnenin veri türünün en büyük değeridir.
[ DÖNGÜ | DÖNGÜ YOK ]
Sıra nesnesinin en düşük değerden (veya azalan dizi nesneleri için en yüksek değerden) yeniden başlatılmasını veya en düşük veya en yüksek değeri aşıldığında bir özel durum oluşturup oluşturmayacağını belirten özellik. Yeni sıralı nesneler için varsayılan döngü seçeneği şeklindedir NO CYCLE.
Uyarı
Bir döngü, SEQUENCE başlangıç değerinden değil, en düşük veya en yüksek değerden yeniden başlatılır.
[ CACHE [ <sabit> ] | ÖNBELLEK YOK ]
Sıra numarası oluşturmak için gereken disk GPO'larının sayısını en aza indirerek sıralı nesneleri kullanan uygulamaların performansını artırır. Varsayılan olarak CACHE değerini alır.
Örneğin, 50 önbellek boyutu seçilirse, SQL Server 50 ayrı değeri önbelleğe almaz. Yalnızca geçerli değeri ve önbellekte kalan değer miktarını önbelleğe alır. Bu, önbelleği depolamak için gereken bellek miktarının her zaman sıralı nesnenin veri türünün iki örneği olduğu anlamına gelir.
Uyarı
Önbellek seçeneği önbellek boyutu belirtilmeden etkinleştirilirse, Veritabanı Altyapısı bir boyut seçer. Ancak, kullanıcıların seçimin tutarlı olmasına güvenmemesi gerekir. Microsoft, önceden bildirimde bulunmadan önbellek boyutunu hesaplama yöntemini değiştirebilir.
seçeneğiyle CACHE oluşturulduğunda beklenmeyen bir kapatma (güç kesintisi gibi) önbellekte kalan sıra numaralarının kaybolmasına neden olabilir.
Açıklamalar
Sıra numaraları geçerli işlemin kapsamı dışında oluşturulur. Sıra numarasını kullanan işlemin işlenip işlenmediği veya geri alınıp alınmadığı fark edilmeden kullanılırlar. Yinelenen doğrulama yalnızca bir kayıt tam olarak dolduruldıktan sonra gerçekleşir. Bu, bazı durumlarda oluşturma sırasında birden fazla kayıt için aynı sayinin kullanılmasına neden olabilir, ancak sonra yinelenen olarak tanımlanır. Bu durum oluşursa ve diğer otomatik sayı değerleri sonraki kayıtlara uygulanmışsa, bu otomatik sayı değerleri arasında bir boşluk oluşmasına neden olabilir ve beklenen davranıştır.
Önbellek yönetimi
Performansı geliştirmek için SQL Server, bağımsız değişken tarafından CACHE belirtilen dizi numaralarının sayısını önceden ayırır.
Örneğin, başlangıç değeri 1 ve önbellek boyutu 15 olan yeni bir sıra oluşturulur. İlk değer gerektiğinde, 1 ile 15 arasında değerler bellekten kullanılabilir hale getirilir. Önbelleğe alınan son değer (15), diskteki sistem tablolarına yazılır. 15 sayının tümü kullanıldığında, sonraki istek (16 numara için) önbelleğin yeniden ayrılmasına neden olur. Yeni önbelleğe alınan son değer (30) sistem tablolarına yazılır.
Veritabanı Altyapısı 22 sayı kullandıktan sonra durdurulursa, bellekteki bir sonraki hedeflenen sıra numarası (23) sistem tablolarına yazılır ve daha önce depolanmış numaranın yerini alır.
SQL Server yeniden başlatıldıktan ve bir sıra numarası gerektiğinde, başlangıç numarası sistem tablolarından okunur (23). 15 sayılık önbellek miktarı (23-38) belleğe ayrılır ve bir sonraki önbellek dışı numara (39) sistem tablolarına yazılır.
Veritabanı Altyapısı güç kesintisi gibi bir olay için anormal şekilde durursa, sistem tablolarından okunan sayı (39) ile sıra yeniden başlatılır. Belleğe ayrılan (ancak hiçbir zaman kullanıcı veya uygulama tarafından istenmeyen) tüm sıra numaraları kaybolur. Bu işlev boşluk bırakabilir, ancak olarak CYCLE tanımlanmadığı veya el ile yeniden başlatılmadığı sürece tek bir sıralı nesne için aynı değerin hiçbir zaman iki kez verilmeyeceğini garanti eder.
Önbellek, geçerli değer (verilen son değer) ve önbellekte kalan değer miktarı izlenerek bellekte tutulur. Bu nedenle, önbellek tarafından kullanılan bellek miktarı her zaman sıralı nesnenin veri türünün iki örneğidir.
Önbellek bağımsız değişkeninin NO CACHE ayarlanması, bir dizi her kullanıldığında sistem tablolarına geçerli dizi değerini yazar. Bu, disk erişimini artırarak performansı yavaşlatabilir, ancak istenmeyen boşluklar olasılığını azaltır. veya NEXT VALUE FOR işlevleri kullanılarak sp_sequence_get_range sayılar istenirse boşluklar yine de oluşabilir, ancak bu durumda sayılar kullanılmaz veya kaydedilmemiş işlemlerde kullanılır.
Bir dizi nesnesi seçeneğini kullandığındaCACHE, sıra nesnesini yeniden başlatırsanız veya , INCREMENT, CYCLE, MINVALUEveya önbellek boyutu özelliklerini değiştirirsenizMAXVALUE, değişiklik gerçekleşmeden önce önbelleğin sistem tablolarına yazılması neden olur. Ardından önbellek geçerli değerle başlayarak yeniden yüklenir (yani, hiçbir sayı atlanmaz). Önbellek boyutunun değiştirilmesi hemen geçerli olur.
Önbelleğe alınmış değerler kullanılabilir olduğunda ÖNBELLEK seçeneği
Aşağıdaki işlem, dizi nesnesi için bellek içi önbellekte kullanılabilir kullanılmayan değerler varsa, bir dizi nesnesinin CACHE seçenek için bir sonraki değeri oluşturması istenildiğinde gerçekleşir.
- Sıra nesnesi için bir sonraki değer hesaplanır.
- Sıra nesnesi için yeni geçerli değer bellekte güncelleştirilir.
- Hesaplanan değer çağıran deyimine döndürülür.
Önbellek tükendiğinde ÖNBELLEK seçeneği
Aşağıdaki işlem, önbellek tükenirse seçenek için bir sonraki değeri oluşturmak üzere CACHE bir dizi nesnesi istenildiğinde gerçekleşir:
Sıra nesnesi için bir sonraki değer hesaplanır.
Yeni önbellek için son değer hesaplanır.
Sıra nesnesinin sistem tablo satırı kilitlenir ve 2. adımda hesaplanan değer (son değer) sistem tablosuna yazılır. Kullanıcıya yeni kalıcı değeri bildirmek için önbelleğe alınmış genişletilmiş olay tetiklenir.
ÖNBELLEK YOK seçeneği
Aşağıdaki işlem, bir dizi nesnesinin seçenek için NO CACHE bir sonraki değeri oluşturması istenildiğinde gerçekleşir:
- Sıra nesnesi için bir sonraki değer hesaplanır.
- Sıra nesnesi için yeni geçerli değer sistem tablosuna yazılır.
- Hesaplanan değer çağıran deyimine döndürülür.
Meta veriler
Diziler hakkında bilgi için sys.sequences sorgusunu kullanın.
Security
Permissions
CREATE SEQUENCEüzerinde ALTER, CONTROLveya SCHEMA izni gerektirir.
- db_owner ve db_ddladmin sabit veritabanı rollerinin üyeleri sıralı nesneler oluşturabilir, değiştirebilir ve bırakabilir.
- db_owner ve db_datawriter sabit veritabanı rollerinin üyeleri, sıralı nesneleri sayı oluşturmalarına neden olarak güncelleştirebilir.
Aşağıdaki örnek, kullanıcıya AdventureWorks\Larry şemada Test dizi oluşturma izni verir.
GRANT CREATE SEQUENCE
ON SCHEMA::Test TO [AdventureWorks\Larry];
Bir dizi nesnesinin sahipliği deyimi kullanılarak ALTER AUTHORIZATION aktarılabilir.
Bir dizi kullanıcı tanımlı bir veri türü kullanıyorsa, sırayı oluşturanın tür üzerinde izni olmalıdır REFERENCES .
Audit
denetlemek CREATE SEQUENCEiçin, öğesini SCHEMA_OBJECT_CHANGE_GROUPizleyin.
Örnekler
Dizi oluşturma ve NEXT VALUE FOR işlevini kullanarak sıra numaraları oluşturma örnekleri için bkz. Sıra Numaraları.
Aşağıdaki örneklerin çoğu Test adlı bir şemada sıralı nesneler oluşturur.
Test şemasını oluşturmak için aşağıdaki deyimi yürütür.
CREATE SCHEMA Test;
GO
A. 1 artan bir sıra oluşturma
Aşağıdaki örnekte Thierry, CountBy1 adlı bir dizi oluşturur ve her kullanıldığında bir tane artar.
CREATE SEQUENCE Test.CountBy1
START WITH 1
INCREMENT BY 1;
GO
B. 1 azaltan bir sıra oluşturma
Aşağıdaki örnek 0'da başlar ve her kullanıldığında bir negatif sayıya sayılır.
CREATE SEQUENCE Test.CountByNeg1
START WITH 0
INCREMENT BY -1;
GO
C. 5 artan bir sıra oluşturma
Aşağıdaki örnek, her kullanıldığında 5 artan bir dizi oluşturur.
CREATE SEQUENCE Test.CountBy1
START WITH 5
INCREMENT BY 5;
GO
D. Belirlenen bir numarayla başlayan bir sıra oluşturma
Thierry, tabloyu içeri aktardıktan sonra kullanılan en yüksek kimlik numarasının 24.328 olduğunu fark eder. Thierry'nin 24.329'dan başlayarak sayı üreten bir diziye ihtiyacı var. Aşağıdaki kod 24.329 ile başlayan ve 1 artıran bir sıra oluşturur.
CREATE SEQUENCE Test.ID_Seq
START WITH 24329
INCREMENT BY 1;
GO
E. Varsayılan değerleri kullanarak sıra oluşturma
Aşağıdaki örnek, varsayılan değerleri kullanarak bir sıra oluşturur.
CREATE SEQUENCE Test.TestSequence;
Dizinin özelliklerini görüntülemek için aşağıdaki deyimi yürütür.
SELECT *
FROM sys.sequences
WHERE name = 'TestSequence';
Çıktının kısmi listesi varsayılan değerleri gösterir.
| Çıktı | Varsayılan değer |
|---|---|
start_value |
-9223372036854775808 |
increment |
1 |
minimum_value |
-9223372036854775808 |
maximum_value |
9223372036854775807 |
is_cycling |
0 |
is_cached |
1 |
current_value |
-9223372036854775808 |
F. Belirli bir veri türüyle sıra oluşturma
Aşağıdaki örnek, -32.768 ile 32.767 arasında bir aralıkla smallint veri türünü kullanarak bir dizi oluşturur.
CREATE SEQUENCE SmallSeq
AS SMALLINT;
G. Tüm bağımsız değişkenleri kullanarak bir dizi oluşturma
Aşağıdaki örnek, 0 ile 255 arasında bir aralığa sahip ondalık veri türünü kullanarak DecSeq adlı bir dizi oluşturur. Sıra 125 ile başlar ve bir sayı her oluşturulduğunda 25 artar. Değer en fazla 200 değerini aştığında sıra döngüye alınacak şekilde yapılandırıldığından, sıra en az 100 değerinde yeniden başlatılır.
CREATE SEQUENCE Test.DecSeq
AS DECIMAL (3, 0)
START WITH 125
INCREMENT BY 25
MINVALUE 100
MAXVALUE 200
CYCLE
CACHE 3;
İlk değeri görmek için aşağıdaki deyimi yürütür; START WITH 125 seçeneği.
SELECT NEXT VALUE FOR Test.DecSeq;
150, 175 ve 200 döndürmek için deyimini üç kez daha yürütür.
Başlangıç değerinin 100 seçeneğine nasıl geri döndüğünü görmek için MINVALUE deyimini yeniden yürütür.
Önbellek boyutunu onaylamak ve geçerli değeri görmek için aşağıdaki kodu yürütür.
SELECT cache_size, current_value
FROM sys.sequences
WHERE name = 'DecSeq';