CREATE SEQUENCE (Transact-SQL)

  • 04/11/2017
  • 10 minutes to read
    • W
    • c
    • r
    • M
    • m
    • +7

Applies to: yesSQL Server (all supported versions) YesAzure SQL Database

Creates a sequence object and specifies its properties. Jono on käyttäjän määrittelemä skeemaan sidottu objekti, joka luo jonon numeerisia arvoja sen määrittelyn mukaan, jolla sekvenssi luotiin. Numeeristen arvojen sarja luodaan nousevassa tai laskevassa järjestyksessä tietyllä aikavälillä, ja se voidaan määrittää käynnistämään (sykli) uudelleen, kun se on käytetty loppuun. Sekvenssejä, toisin kuin identiteettisarakkeita, ei liitetä tiettyihin taulukoihin. Sovellukset viittaavat sekvenssiobjektiin, jolla haetaan sen seuraava arvo. Sovellus ohjaa sekvenssien ja taulukoiden välistä suhdetta. Käyttäjäsovellukset voivat viitata sekvenssiobjektiin ja koordinoida arvoja useilla riveillä ja taulukoilla.

toisin kuin identiteettisarakkeiden arvot, jotka syntyvät, kun rivejä lisätään, sovellus voi saada seuraavan järjestysnumeron lisäämättä riviä kutsumalla funktion seuraavaa arvoa. Käytä sp_sequence_get_rangea saadaksesi useita järjestysnumeroita kerralla.

tietoa ja skenaarioita, joissa käytetään sekä CREATE SEQUENCE-että funktion seuraavaa arvoa, katso järjestysnumerot.

Topic link icon Transact-SQL-Syntaksikonventiot

syntaksi

CREATE SEQUENCE sequence_name ] } | { NO MINVALUE } ] } | { NO MAXVALUE } ] } | { NO CACHE } ] 

Huomautus

nähdäksesi Transact-SQL-syntaksin SQL Server 2014: lle ja sitä ennen, Katso aikaisempien versioiden dokumentaatio.

argumentit

sekvenssi_nimi
määrittää yksilöllisen nimen, jolla sekvenssi tunnetaan tietokannassa. Tyyppi on sysnimi.

määrittää sekvenssiobjektin rajat. Oletusminimi uudelle sekvenssiobjektille on sekvenssiobjektin tietotyypin vähimmäisarvo. Tämä on nolla tinyint-tietotyypille ja negatiivinen luku kaikille muille tietotyypeille.

Ominaisuus, joka määrittää, pitäisikö sekvenssiobjektin käynnistyä uudelleen vähimmäisarvosta (tai alenevien sekvenssiobjektien enimmäisarvosta) vai heittää poikkeus, kun sen minimi-tai enimmäisarvo ylittyy. Oletussyklin vaihtoehto uusille sekvenssiobjekteille on ei sykliä.

Note

jaksotus käynnistyy uudelleen minimi-tai maksimiarvosta, ei aloitusarvosta.

/ no CACHE ]
Lisää sekvenssiobjekteja käyttävien sovellusten suorituskykyä minimoimalla niiden iOS-levyjen määrän, joita tarvitaan järjestysnumeroiden luomiseen. Oletuksena välimuisti.

esimerkiksi jos valitaan välimuistikoko 50, SQL Server ei säilytä 50 yksittäistä arvoa välimuistissa. Se kätkee vain nykyisen arvon ja jäljellä olevien arvojen määrän välimuistiin. Tämä tarkoittaa, että välimuistin tallentamiseen tarvitaan aina kaksi sekvenssiobjektin tietotyypin ilmentymää.

Huomautus

Jos välimuistin valinta on käytössä määrittämättä välimuistin kokoa, tietokantamoottori valitsee koon. Käyttäjien ei kuitenkaan pitäisi luottaa siihen, että valinta on johdonmukainen. Microsoft saattaa muuttaa välimuistin koon laskentatapaa ilman erillistä ilmoitusta.

luotaessa VÄLIMUISTIASETUKSELLA odottamaton sammutus (kuten sähkökatko) voi johtaa välimuistiin jäävien järjestysnumeroiden häviämiseen.

Yleisiä huomioita

järjestysnumerot luodaan nykyisen tapahtuman soveltamisalan ulkopuolella. Ne kulutetaan riippumatta siitä, onko tapahtuma, jossa käytetään järjestysnumeroa, sidottu vai rullattu takaisin. Päällekkäinen validointi tapahtuu vasta, kun tietue on täysin asutettu. Tämä voi johtaa joissakin tapauksissa, joissa samaa numeroa käytetään useampaan kuin yhteen tietueeseen luomisen aikana, mutta sitten se tunnistetaan kaksoiskappaleeksi. Jos näin tapahtuu ja muita autonumber-arvoja on sovellettu myöhempiin tietueisiin, tämä voi johtaa kuiluun autonumber-arvojen ja oletetun käyttäytymisen välillä.

välimuistin hallinta

suorituskyvyn parantamiseksi SQL Server jakaa etukäteen VÄLIMUISTIARGUMENTIN määrittelemien järjestysnumeroiden määrän.

esimerkiksi luodaan uusi sekvenssi, jonka lähtöarvo on 1 ja välimuistin koko 15. Kun ensimmäistä arvoa tarvitaan, arvot 1-15 saadaan ulkomuistista. Viimeinen välimuistissa oleva arvo (15) kirjoitetaan levyllä oleviin järjestelmätaulukoihin. Kun kaikki 15 numeroa on käytetty, seuraava pyyntö (numeron 16 osalta) aiheuttaa välimuistin kohdistamisen uudelleen. Uusi Viimeksi välimuistissa oleva arvo (30) kirjoitetaan järjestelmätaulukoihin.

Jos tietokantamoottori pysäytetään 22 numeron käytön jälkeen, järjestelmätaulukoihin kirjoitetaan seuraava aiottu järjestysnumero muistiin (23), joka korvaa aiemmin tallennetun numeron.

kun SQL Server käynnistyy uudelleen ja tarvitaan järjestysnumero, alkunumero luetaan järjestelmätaulukoista (23). Välimuistin määrä 15 numeroa (23-38) jaetaan muistiin ja seuraava ei-välimuistin numero (39) kirjoitetaan järjestelmätaulukoihin.

Jos tietokantamoottori pysähtyy epänormaalisti esimerkiksi sähkökatkon vuoksi, sarja käynnistyy uudelleen järjestelmätaulukoista luetulla numerolla (39). Kaikki muistiin osoitetut järjestysnumerot (joita käyttäjä tai sovellus ei ole koskaan pyytänyt) katoavat. Tämä toiminto voi jättää aukkoja, mutta takaa, että samaa arvoa ei koskaan anneta kahta kertaa yhdelle sekvenssiobjektille, ellei sitä ole määritelty sykliksi tai käynnistetä manuaalisesti uudelleen.

välimuistia ylläpidetään muistissa seuraamalla sen hetkistä arvoa (viimeinen annettu arvo) ja välimuistiin jääneiden arvojen määrää. Siksi välimuistin käyttämä muistin määrä on aina kaksi esiintymää sekvenssiobjektin tietotyypistä.

asettamalla välimuistiargumentti ei välimuistia kirjoittaa nykyisen sekvenssin arvon järjestelmätaulukoihin joka kerta, kun sekvenssiä käytetään. Tämä saattaa hidastaa suorituskykyä lisäämällä levyn pääsyä, mutta vähentää tahattomien aukkojen mahdollisuutta. Aukkoja voi silti esiintyä, jos numeroita pyydetään käyttämällä seuraavaa arvoa tai sp_sequence_get_range-funktioille, mutta silloin numeroita ei joko käytetä tai niitä käytetään toimittamattomissa tapahtumissa.

kun sekvenssiobjekti käyttää VÄLIMUISTIASETUSTA, jos käynnistät sekvenssiobjektin uudelleen tai muutat INKREMENT -, CYCLE -, MINVALUE -, MAXVALUE-tai välimuistin koon ominaisuuksia, se aiheuttaa välimuistin kirjoittamisen järjestelmätaulukoihin ennen kuin muutos tapahtuu. Sitten välimuisti Ladataan uudelleen alkaen nykyisestä arvosta (eli numeroita ei ohiteta). Välimuistin koon muuttaminen tulee voimaan välittömästi.

VÄLIMUISTIASETUS kun välimuistissa olevat arvot ovat käytettävissä

seuraava prosessi tapahtuu joka kerta, kun sekvenssiobjektia pyydetään luomaan seuraava arvo VÄLIMUISTIASETUKSELLE, jos sekvenssiobjektin muistimuistivälimuistissa on käyttämättömiä arvoja.

  1. lasketaan sekvenssiobjektin seuraava arvo.

  2. sekvenssiobjektin Uusi virta-arvo päivittyy muistiin.

  3. laskettu arvo palautetaan kutsulauseeseen.

VÄLIMUISTIASETUS kun välimuisti on käytetty

seuraava prosessi tapahtuu joka kerta, kun sekvenssiobjektia pyydetään luomaan seuraava arvo VÄLIMUISTIASETUKSELLE, jos välimuisti on käytetty loppuun:

  1. sekvenssiobjektin seuraava arvo lasketaan.

  2. lasketaan uuden välimuistin viimeinen arvo.

  3. sekvenssiobjektin järjestelmätaulukon rivi lukitaan, ja vaiheessa 2 laskettu arvo (viimeinen arvo) kirjoitetaan järjestelmätaulukkoon. Välimuistin tyhjentämä xevent laukaistaan, jotta käyttäjä saa tiedon uudesta säilyneestä arvosta.

ei VÄLIMUISTIVAIHTOEHTOA

seuraava prosessi tapahtuu joka kerta, kun sekvenssiobjektia pyydetään luomaan seuraava arvo ei välimuistia-vaihtoehdolle:

  1. sekvenssiobjektin seuraava arvo lasketaan.

  2. järjestelmätaulukkoon kirjoitetaan sekvenssiobjektin Uusi virta-arvo.

  3. laskettu arvo palautetaan kutsulauseeseen.

metatiedot

tietoa sekvensseistä, kysely sys.järjestys.

turvallisuus

käyttöoikeudet

vaatii skeemaan luoda sekvenssi -, muuttaa-tai OHJAUSOIKEUKSIA.

  • db_owner-ja db_ddladmin kiinteiden tietokantaroolien jäsenet voivat luoda, muuttaa ja pudottaa sekvenssiobjekteja.

  • db_owner-ja db_datawriter-kiinteiden tietokantaroolien jäsenet voivat päivittää sekvenssin olioita aiheuttamalla niiden tuottavan numeroita.

seuraava esimerkki antaa käyttäjälle AdventureWorks\Larry-luvan luoda sekvenssejä Testikaavioon.

GRANT CREATE SEQUENCE ON SCHEMA::Test TO 

sekvenssiobjektin omistus voidaan siirtää ALTER AUTHORIZATION statement-lausekkeen avulla.

Jos sekvenssi käyttää käyttäjän määrittelemää tietotyyppiä, on sekvenssin luojalla oltava tyyppiin VIITTAUSOIKEUS.

Audit

Jos haluat auditoida create SEQUENCEN, seuraa SCHEMA_OBJECT_CHANGE_ Groupia.

esimerkkejä

esimerkkejä sekvenssien luomisesta ja funktion seuraavan arvon käyttämisestä järjestysnumeroiden luomiseen, katso järjestysnumerot.

useimmat seuraavista esimerkeistä luovat sekvenssiobjekteja testiksi nimetyssä skeemassa.

luodaksesi testirakenteen, suorita seuraava lauseke.

CREATE SCHEMA Test ; GO 

A. luodessaan sekvenssin, joka kasvaa 1

seuraavassa esimerkissä, Thierry luo sekvenssin nimeltä CountBy1, joka kasvaa yhdellä joka kerta, kun sitä käytetään.

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

B. luodaan jono, joka pienenee 1

seuraava esimerkki alkaa pisteestä 0 ja laskee negatiivisiin lukuihin yhdellä joka kerta, kun sitä käytetään.

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

C. Luomalla sekvenssi, joka kasvaa 5

seuraavassa esimerkissä luodaan sekvenssi, joka kasvaa 5: llä joka kerta, kun sitä käytetään.

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

D. luomalla jonon, joka alkaa määrätyllä numerolla

tuotuaan taulukon, Thierry huomaa, että korkein käytetty ID-numero on 24,328. Thierry tarvitsee sekvenssin, joka tuottaa numeroita alkaen 24,329. Seuraava koodi luo sekvenssin, joka alkaa 24,329: llä ja kasvaa 1: llä.

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

E. Sekvenssin luominen oletusarvoja

käyttäen seuraavassa esimerkissä luodaan sekvenssi oletusarvoja käyttäen.

CREATE SEQUENCE Test.TestSequence ; 

suorita seuraava lauseke nähdäksesi sekvenssin ominaisuudet.

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

tulosteen osittainen luettelo osoittaa oletusarvot.

1

Output Default value
start_value -9223372036854775808
increment 1
mimimum_value -9223372036854775808
maximum_value 9223372036854775807
is_cycling 0
is_cached
current_value -9223372036854775808

F. tietyn tietotyypin omaavan sekvenssin luominen

seuraavassa esimerkissä luodaan sarja käyttäen smallint-tietotyyppiä, jonka vaihteluväli on -32,768-32,767.

CREATE SEQUENCE SmallSeq AS smallint ; 

G. sekvenssin luominen kaikilla argumenteilla

seuraavassa esimerkissä luodaan sekvenssi nimeltä DecSeq käyttäen desimaalitietotyyppiä, jonka vaihteluväli on 0-255. Sekvenssi alkaa 125: llä ja kasvaa 25: llä aina, kun luku syntyy. Koska sekvenssi on määritetty kiertämään, kun arvo ylittää enimmäisarvon 200, sekvenssi käynnistyy uudelleen PIENIMMÄLLÄ arvolla 100.

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

suorita seuraava lauseke nähdäksesi ensimmäisen arvon; START WITH vaihtoehto 125.

SELECT NEXT VALUE FOR Test.DecSeq; 

Suorita lausuma vielä kolme kertaa palauttaaksesi 150, 175 ja 200.

Suorita lauseke uudelleen, niin näet, miten alkuarvo pyörii takaisin MINVALUE vaihtoehto 100.

suorita seuraava koodi vahvistaaksesi välimuistin koon ja nähdäksesi nykyisen arvon.

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

Katso myös

ALTER SEQUENCE (Transact-SQL)
DROP SEQUENCE (Transact-SQL)
NEXT VALUE for (Transact-SQL)
Sequence Numbers

Vastaa

Sähköpostiosoitettasi ei julkaista.