SIRA (Transact-sql) oluştur

Bir sıra oluşturur ve özelliklerini belirler. Bir sıra sıra ile oluşturulduğu belirtimine göre sayısal değerler dizisi oluşturur, kullanıcı tanımlı şema bağımlı nesnesidir. Sayısal değerler dizisi artan veya azalan bir tanımlı aralıklarla oluşturulan ve (döngüsü) ne zaman yeniden yapılandırılabilir tükendi. Sıraları, kimlik sütunlarının, aksine belirli tabloları ile ilişkili değildir. Uygulamalar, sonraki değerini almak için bir sıra nesnesine başvurmaktadırlar. Dizileri ve tablolar arasında ilişki uygulama tarafından denetlenir. Kullanıcı uygulamaları, bir sıra nesnesi başvuru ve birden çok satır ve tablo değerleri koordine etmek.

Satır eklediğinizde oluşturulan kimlik sütun değerleri farklı olarak, uygulama sonraki sıra numarasını arayarak satır eklemeden elde edebilirsiniz sonraki değeri işlev. Kullanım sp_sequence_get_range aynı anda birden fazla sıra numaraları almak için.

Bilgi ve her ikisini de kullanan senaryolar için Sıra oluşturmak ve Sonraki değeri için işlevi, bakın Sıra numaraları.

Konu bağlantısı simgesi Transact-SQL Sözdizim 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 } ]
    [ ; ]

Bağımsız değişkenler

  • sequence_name
    Sıra tanındığı benzersiz bir ad veritabanını belirtir. Türü sysname.

  • [built_in_integer_type | kullanıcı-defined_integer_type
    Bir sıra herhangi bir tamsayı türü olarak tanımlanabilir. Türlerine izin verilir.

    • tinyint-Aralığı 0-255

    • smallint-Range -32,768 ile 32,767

    • int-Range -2,147,483,648 ile 2,147,483,647

    • bigint-Range -9,223,372,036,854,775,808 ile 9,223,372,036,854,775,807

    • decimalve numericölçekli 0.

    • İzin verilen türlerinden birini temel alan herhangi bir kullanıcı tanımlı veri türü (takma adı).

    Hiçbir veri türü yoksa, bigintveri türü varsayılan olarak kullanılır.

  • start ile <sürekli>
    Sıra nesne tarafından döndürülen ilk değer. Başlangıç değeri az veya bu değere eşit en yüksek ve daha büyük bir değer olması veya sıra nesnesinin en düşük değerine eşit. 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 sıra nesnesi için en büyük değer olduğunu.

  • ARTIŞ ile <sürekli>
    Değeri artırmak (veya negatif ise eksiltme için) kullanılan her çağrı için sıra nesne değeri Sonraki değer için işlevi. Negatif bir değer artışı ise, sıra nesnesinin azalan; Aksi takdirde, artan. Artış 0 olamaz. Yeni bir sıra nesnesi için varsayılan artışı 1'dir.

  • MINVALUE<sürekli> | no MINVALUE
    Sıra nesnesi için sınırları belirler. Yeni bir sıra nesnesi için varsayılan en az değer sıra nesnesinin veri türünü asgari değeridir. Bunun için sıfır olan tinyintveri türü ve tüm diğer veri türleri için negatif bir sayı.

  • [MAXDEĞER <sürekli> | no MAXDEĞER
    Sıra nesnesi için sınırları belirler. Yeni bir sıra nesnesi için varsayılan maksimum değer sıra nesne veri türü maksimum değeridir.

  • DÖNGÜSÜ |NO CYCLE
    Sıra nesnesi veya en az değer (veya azalan sıra nesneleri için maksimum) yeniden minimum veya maksimum değeri aşıldığında bir istisna belirten özellik. Yeni sıra nesneleri için varsayılan döngü seçeneği yok döngüdür.

    Bisiklet minimum veya maksimum değeri başlangıç değerinden yeniden unutmayın.

  • CACHE<constant> | ÖNBELLEK YOK]
    Disk sıra numaraları oluşturmak için gereken IOS sayısını en aza indirerek sıra nesneleri kullanan uygulamalar için performansı artırır.

    Örneğin, 50 önbellek boyutu seçilirse, SQL Server50 bireysel değerleri önbelleğe tutmaz. Yalnızca geçerli değeri ve değerleri sola önbellekteki sayısı önbelleğe alır. Bu önbellekte depolamak için gereken bellek her zaman sıra nesne veri türü iki örneğini olduğu anlamına gelir.

    [!NOT]

    Önbellek boyutu belirtmeden önbellek seçeneği etkin olduğunda veritabanı altyapısı bir boyut seçer. Ancak, kullanıcıların tutarlı olmak seçimi güvenmemelisiniz. Microsoftbulunmaksızın önbellek boyutu hesaplama yöntemi değişebilir.

    Zaman ile oluşturulan cache seçeneği, beklenmeyen bir kapatma (örneğin, bir güç kesintisi) sonuçlanabilir önbellekte kalan sıra numaraları kaybı.

Genel Yorumlar

Sıra numaraları geçerli hareket kapsamı dışında oluşturulur. Sıra numarası kullanarak hareket tamamlandıktan veya geri alınmış olup da tüketilir.

Önbellek Yönetimi

Performansı artırmak için SQL Servertarafından belirtilen sıra numaraları numarası pre-allocates ÖNBELLEK bağımsız değişkeni.

Örneğin, başlangıç değeri 1 ve 15 önbellek boyutu ile yeni bir sıra oluşturulur. İlk değer gerekli olduğunda değerleri 1 ile 15 bellekten sunulur. Son önbellek değeri (15), sistem tabloları diske yazılır. Tüm 15 sayılar kullanıldığında, (sayı 16 için) bir sonraki istekte yeniden tahsis edilecek önbellek neden olur. Yeni son önbellek değeri (30), sistem tabloları yazılacaktır.

Eğer Veritabanı Altyapısıise 22 sayı kullandıktan sonra durdu, sonraki sıra numarasını hafızasına (23) yazılı sistem tabloları, önceden saklanan sayı yerine amaçlanan.

sql sunucu yeniden başlatıldıktan sonra sıra numarası gerekli başlangıç numarası sistem tablolarının (23) okunur. Önbellek tutar 15 sayı (2338) bellek tahsis edilir ve bir sonraki önbelleği olmayan numara (39) sistem tabloları yazılır.

Eğer Veritabanı Altyapısıdurur anormal elektrik kesintisi gibi bir olay için sıra yeniden dan sistem tabloları (39) sayı oku ile. Herhangi bir sıra (ama asla istenen bir kullanıcı veya uygulama tarafından) bellek tahsis numaralarını kaybolur. Bu işlevsellik olarak tanımlandığı takdirde, aynı değeri asla iki kez bir tek sıra nesnesi için verilecek garanti ancak boşluklar bırakabilir döngüsü ya da el ile yeniden.

Önbellek geçerli değerini (son değer verilen) ve değerleri sola önbellekteki sayısı izleyerek bellekte tutulur. Bu nedenle, önbelleği tarafından kullanılan bellek miktarını her zaman iki tane sıra nesne veri türü var.

Önbellek bağımsız değişken ayarı no cache geçerli sıra değeri sistem tabloları bir sıra kullanılan her zaman yazıyor. Bu disk erişimi artırarak performansı yavaşlatabilir, ancak istenmeyen boşlukları riskini azaltır. Boşlukları hala numaralarını kullanarak istendiğinde ortaya Sonraki değer için veya sp_sequence_get_range işlevleri, ama sonra sayıları ya da kullanılmaz veya kaydedilmemiş hareketleri kullanılır.

Ne zaman bir sıra nesnesi kullanan ÖNBELLEK seçeneği, sıra nesnesinin yeniden ya da alter artışı, döngüsü, MINVALUE, MAXDEĞER, ya da önbellek boyutu özellikleri değişiklik gerçekleşmeden önce sistem tabloları yazılacak önbellek neden olur. Önbelleğin geçerli değeri ile (yani başlangıç sonra yeniden hiçbir numaraları atlanır). Önbellek boyutunu değiştirme hemen etkili olur.

Önbelleğe alınan değerler kullanılabilir olduğunda seçeneği ÖNBELLEK

Bir sıra nesnesi için sonraki değer üretmek istediği her zaman aşağıdaki işlem gerçekleşir cache yoksa kullanılmayan değerleri sıra nesnesi için bellek içi önbellek seçeneği.

  1. Sıra nesnesi için sonraki değeri hesaplanır.

  2. Sıra nesnesi için yeni geçerli değeri bellekteki güncelleştirilir.

  3. Arama bildirimi için hesaplanan değeri döndürülür.

Önbellek kaldığında ÖNBELLEĞİ seçeneği

Sonraki değeri oluşturmak için bir sıra nesnesi istenen her zaman aşağıdaki işlem gerçekleşir cache tükenmiş önbelleği seçeneği:

  1. Sıra nesnesi için sonraki değeri hesaplanır.

  2. Yeni önbellek için son değeri hesaplanır.

  3. Sıra nesnesi için sistem tablo satırı kilitli ve adım 2 (son değer) hesaplanan değeri sistem tablosuna yazılır. Önbellek tükenmiş xevent, yeni kalıcı değeri kullanıcıya bildirmek için harekete geçirilir.

ÖNBELLEK seçeneği yok

Bir sıra nesnesi için sonraki değer üretmek istediği her zaman aşağıdaki işlem gerçekleşir no cache seçeneği:

  1. Sıra nesnesi için sonraki değeri hesaplanır.

  2. Sıra nesnesi için yeni geçerli değeri sistem tablosuna yazılır.

  3. Arama bildirimi için hesaplanan değeri döndürülür.

Meta veri

Serileri hakkında daha fazla bilgi için sorgu sys.sequences.

Güvenlik

İzinler

Gerektirir Sıra oluşturmak, alter, veya Denetim Şema izni.

  • Üyeleri db_ownerve db_ddladminsabit veritabanı rolleri oluşturmak, değiştirmek ve sıra nesneleri bırakın.

  • Üyeleri db_ownerve db_datawritersabit veritabanı rolleri numaralarını oluşturması için neden olarak sıra nesneleri güncelleştirebilirsiniz.

Aşağıdaki örnek, kullanıcı verir AdventureWorks\Larrysıralarını oluşturmanıza izin Testşema.

GRANT CREATE SEQUENCE ON SCHEMA::Test TO [AdventureWorks\Larry]

GRANT CREATE SEQUENCE ON SCHEMA::Test TO [AdventureWorks\Larry]

Sahipliğini bir sıra nesnesi transfer kullanarak alter YETKILENDIRME deyimi.

Bir kullanıcı tanımlı veri türü kullanıyorsa, dizinin yaratıcısı türüne başvurular izninizin olması gerekir.

Denetim

Denetlenecek Sıra oluşturmak, monitör schema_object_change_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ı.

Aşağıdaki örneklerde çoğunu adlı bir şemada sıra nesneleri oluşturmak Test.

Oluşturmak için Testşema aşağıdaki deyimini yürütün.

-- CREATE SCHEMA Test ;
GO

-- CREATE SCHEMA Test ;
GO

A.1 Artar bir sıra oluşturma

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

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

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

B.1 Azaltan bir sıra oluşturma

Aşağıdaki örnek, 0 olarak başlatılır ve kullanıldığı her zaman negatif sayılara birer sayar.

CREATE SEQUENCE Test.CountByNeg1
    START WITH 0
    INCREMENT BY -1 ;
GO

CREATE SEQUENCE Test.CountByNeg1
    START WITH 0
    INCREMENT BY -1 ;
GO

C.5 Artar bir sıra oluşturma

Aşağıdaki örnek, her zaman kullanılır 5 artıran bir sıra oluşturur.

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

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

D.Belirlenmiş bir sayı dizisi oluşturma başlar

Tablo aldıktan sonra Thierry kullanılan en yüksek kimlik numarası 24,328 olduğunu görür. Thierry 24,329 başlayan numaralar oluşturacak bir sıra gerekir. Aşağıdaki kod, 24,329 ve aralıklarla 1 ile başlar bir sıra oluşturur.

CREATE SEQUENCE Test.ID_Seq
    START WITH 24329
    INCREMENT BY 1 ;
GO

CREATE SEQUENCE Test.ID_Seq
    START WITH 24329
    INCREMENT BY 1 ;
GO

E.Varsayılan değerleri kullanarak bir sıra oluşturma

Aşağıdaki örnek, varsayılan değerleri kullanarak bir sıra oluşturur.

CREATE SEQUENCE Test.TestSequence ;

CREATE SEQUENCE Test.TestSequence ;

Sıra özelliklerini görüntülemek için aşağıdaki deyimini yürütün.

SELECT * FROM sys.sequences WHERE name = 'TestSequence' ;

SELECT * FROM sys.sequences WHERE name = 'TestSequence' ;

Çıkış kısmi bir listesi varsayılan değerleri gösterir.

start_value

-9223372036854775808

increment

1

mimimum_value

-9223372036854775808

maximum_value

9223372036854775807

is_cycling

0

is_cached

1

current_value

-9223372036854775808

F.Belirli bir veri türü ile bir sıra oluşturma

Aşağıdaki örnek, kullanan bir sıra oluşturur smallintveri türü, bir Aralık-32,768 ile 32,767.

CREATE SEQUENCE SmallSeq
    AS smallint ;

CREATE SEQUENCE SmallSeq
    AS smallint ;

G.Tüm bağımsız değişkenler kullanılarak bir sıra oluşturma

Aşağıdaki örnek, adlı bir sıra oluşturur DecSeqkullanarak decimalveri türü, bir aralık 0 ile 255 arasında olan. Sıra 125 ve aralıklarla tarafından 25 sayı üreten her zaman başlar. Sıra değeri 200 en yüksek değeri aştığında dolaşmak için yapılandırıldığından sırası 100 asgari değeri yeniden başlatır.

CREATE SEQUENCE Test.DecSeq
    AS decimal(3,0) 
    START WITH 125
    INCREMENT BY 25
    MINVALUE 100
    MAXVALUE 200
    CYCLE
    CACHE 3
;

CREATE SEQUENCE Test.DecSeq
    AS decimal(3,0) 
    START WITH 125
    INCREMENT BY 25
    MINVALUE 100
    MAXVALUE 200
    CYCLE
    CACHE 3
;

İlk değer görmek için aşağıdaki deyimi yürütme; START WITHseçenek 125.

SELECT NEXT VALUE FOR Test.DecSeq;

SELECT NEXT VALUE FOR Test.DecSeq;

150, 175 Ve 200 dönmek için üç kez daha deyimi yürütme.

Tekrar nasıl geri başlangıç değerini döngüleri görmek için deyimi yürütme MINVALUE100 seçeneği.

Önbellek boyutunu onaylayın ve geçerli değerini görmek için aşağıdaki kod yürütün.

SELECT cache_size, current_value 
FROM sys.sequences
WHERE name = 'DecSeq' ;

SELECT cache_size, current_value 
FROM sys.sequences
WHERE name = 'DecSeq' ;

Ayrıca bkz.

Başvuru

alter SIRASI (Transact-sql)

SIRA (Transact-sql) bırak

SONRAKİ değeri (Transact-sql)

Kavramlar

Sıra numaraları