Udostępnij za pośrednictwem


ALTER SEQUENCE (Transact-SQL)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Modyfikuje argumenty istniejącego obiektu sekwencji. Jeśli sekwencja została utworzona przy użyciu CACHE, zmiana sekwencji spowoduje ponowne utworzenie pamięci podręcznej.

Obiekty sekwencyjne są tworzone przy użyciu instrukcji CREATE SEQUENCE. Sekwencje są wartościami całkowitymi i mogą być dowolnym typem danych, który zwraca liczbę całkowitą. Nie można zmienić typu danych przy użyciu instrukcji ALTER SEQUENCE. Aby zmienić typ danych, upuść i utwórz obiekt sekwencji.

Sekwencja to obiekt powiązany ze schematem zdefiniowanym przez użytkownika, który generuje sekwencję wartości liczbowych zgodnie ze specyfikacją. Nowe wartości są generowane z sekwencji przez wywołanie funkcji NEXT VALUE FOR. Użyj sp_sequence_get_range, aby pobrać wiele numerów sekwencji jednocześnie. Aby uzyskać informacje i scenariusze używające funkcji CREATE SEQUENCE, sp_sequence_get_rangei NEXT VALUE FOR, zobacz Sequence Numbers.

Transact-SQL konwencje składni

Składnia

ALTER SEQUENCE [schema_name. ] sequence_name  
    [ RESTART [ WITH <constant> ] ]  
    [ INCREMENT BY <constant> ]  
    [ { MINVALUE <constant> } | { NO MINVALUE } ]  
    [ { MAXVALUE <constant> } | { NO MAXVALUE } ]  
    [ CYCLE | { NO CYCLE } ]  
    [ { CACHE [ <constant> ] } | { NO CACHE } ]  
    [ ; ]  

Argumenty

sequence_name
Określa unikatową nazwę, za pomocą której sekwencja jest znana w bazie danych. Typem jest nazwa_systemu.

RESTART [ WITH <constant> ]
Następna wartość, która zostanie zwrócona przez obiekt sekwencji. Jeśli zostanie podana wartość RESTART WITH, musi być liczbą całkowitą mniejszą lub równą maksymalnej lub większej lub równej minimalnej wartości obiektu sekwencji. Jeśli wartość WITH zostanie pominięta, numerowanie sekwencji zostanie uruchomione ponownie na podstawie oryginalnych opcji CREATE SEQUENCE.

INCREMENT BY <stała>
Wartość używana do przyrostu (lub dekrementacji, jeśli ujemna) wartość podstawowa obiektu sekwencji dla każdego wywołania funkcji NEXT VALUE FOR. Jeśli przyrost jest ujemną wartością, obiekt sekwencji malejąco, w przeciwnym razie jest rosnąco. Przyrost nie może być 0.

[ MINVALUE <stała> | NO MINVALUE ]
Określa granice dla obiektu sekwencji. Jeśli nie określono wartości MINVALUE, zostanie użyta minimalna możliwa wartość typu danych sekwencji.

[ MAXVALUE <stałe> | BRAK WARTOŚCI MAXVALUE
Określa granice dla obiektu sekwencji. Jeśli nie określono wartości MAXVALUE, zostanie użyta maksymalna możliwa wartość typu danych sekwencji.

[ CYCLE | BRAK CYKLU ]
Ta właściwość określa, czy obiekt sekwencji powinien zostać uruchomiony ponownie z minimalnej wartości (lub maksymalnej dla obiektów sekwencji malejącej) lub zgłosić wyjątek w przypadku przekroczenia wartości minimalnej lub maksymalnej.

Nuta

Po przejściu na rowerze następna wartość jest minimalną lub maksymalną wartością, a nie wartością POCZĄTKOWą sekwencji.

[ PAMIĘĆ PODRĘCZNA [<stała> ] | BRAK PAMIĘCI PODRĘCZNEJ ]
Zwiększa wydajność aplikacji korzystających z obiektów sekwencji, minimalizując liczbę operacji we/wy wymaganych do utrwalania wygenerowanych wartości w tabelach systemowych.

Aby uzyskać więcej informacji na temat zachowania pamięci podręcznej, zobacz CREATE SEQUENCE (Transact-SQL).

Uwagi

Aby uzyskać informacje na temat sposobu tworzenia sekwencji i sposobu zarządzania pamięcią podręczną sekwencji, zobacz CREATE SEQUENCE (Transact-SQL).

Wartości MINVALUE dla sekwencji rosnących i MAXVALUE dla sekwencji malejących nie mogą zostać zmienione na wartość, która nie zezwala na wartość START WITH sekwencji. Aby zmienić wartość MINVALUE sekwencji rosnącej na liczbę większą niż wartość START WITH lub zmienić wartość MAXVALUE sekwencji malejącej na liczbę mniejszą niż wartość START WITH, dołącz argument RESTART WITH, aby ponownie uruchomić sekwencję w żądanym punkcie, który mieści się w zakresie minimalnym i maksymalnym.

Metadane

Aby uzyskać informacje o sekwencjach, wykonaj zapytanie sys.sequences.

Bezpieczeństwo

Uprawnienia

Wymaga uprawnienia ALTER sekwencji lub alter uprawnienia schematu. Aby udzielić uprawnienia ALTER w sekwencji, użyj ALTER ON OBJECT w następującym formacie:

GRANT ALTER ON OBJECT::Test.TinySeq TO [AdventureWorks\Larry]  

Własność obiektu sekwencji można przenieść przy użyciu instrukcji ALTER AUTHORIZATION.

Audyt

Aby przeprowadzić inspekcję ALTER SEQUENCE, monitoruj SCHEMA_OBJECT_CHANGE_GROUP.

Przykłady

Aby zapoznać się z przykładami tworzenia sekwencji i używania funkcji NEXT VALUE FOR do generowania numerów sekwencji, zobacz Sequence Numbers.

A. Zmienianie sekwencji

Poniższy przykład tworzy schemat o nazwie Test i sekwencję o nazwie TestSeq przy użyciu int typu danych o zakresie od 100 do 200. Sekwencja rozpoczyna się od 125 i zwiększa się o 25 za każdym razem, gdy jest generowana liczba. Ponieważ sekwencja jest skonfigurowana do cyklu, gdy wartość przekracza maksymalną wartość 200, sekwencja jest uruchamiana ponownie przy minimalnej wartości 100.

CREATE SCHEMA Test ;  
GO  
  
CREATE SEQUENCE Test.TestSeq  
    AS int   
    START WITH 125  
    INCREMENT BY 25  
    MINVALUE 100  
    MAXVALUE 200  
    CYCLE  
    CACHE 3  
;  
GO  

Poniższy przykład zmienia sekwencję TestSeq na zakres od 50 do 200. Sekwencja ponownie uruchamia serię numerowania z 100 i zwiększa się o 50 za każdym razem, gdy liczba jest generowana.

ALTER SEQUENCE Test. TestSeq  
    RESTART WITH 100  
    INCREMENT BY 50  
    MINVALUE 50  
    MAXVALUE 200  
    NO CYCLE  
    NO CACHE  
;  
GO  

Ponieważ sekwencja nie będzie cykliczna, funkcja NEXT VALUE FOR spowoduje błąd, gdy sekwencja przekroczy 200.

B. Ponowne uruchamianie sekwencji

Poniższy przykład tworzy sekwencję o nazwie CountBy1. Sekwencja używa wartości domyślnych.

CREATE SEQUENCE Test.CountBy1 ;  

Aby wygenerować wartość sekwencji, właściciel wykonuje następującą instrukcję:

SELECT NEXT VALUE FOR Test.CountBy1  

Zwracana wartość -9 223 372 036 854 775 808 jest najniższą możliwą wartością dla typu danych bigint. Właściciel zdaje sobie sprawę, że chce, aby sekwencja rozpoczynała się od 1, ale nie wskazywała klauzuli START WITH podczas tworzenia sekwencji. Aby naprawić ten błąd, właściciel wykonuje następującą instrukcję.

ALTER SEQUENCE Test.CountBy1 RESTART WITH 1 ;  

Następnie właściciel ponownie wykonuje następującą instrukcję, aby wygenerować numer sekwencji.

SELECT NEXT VALUE FOR Test.CountBy1;  

Liczba jest teraz 1, zgodnie z oczekiwaniami.

Sekwencja CountBy1 została utworzona przy użyciu wartości domyślnej NO CYCLE, więc przestanie działać po wygenerowaniu numeru 9 223 372 036 854 775 807. Kolejne wywołania obiektu sekwencji zwracają błąd 11728. Poniższa instrukcja zmienia obiekt sekwencji na cykl i ustawia pamięć podręczną 20.

ALTER SEQUENCE Test.CountBy1  
    CYCLE  
    CACHE 20 ; 

Teraz, gdy obiekt sekwencji osiągnie 923 372 036 854 775 807, będzie to cykl, a następna liczba po rowerze będzie minimalną liczbą typu danych, -9,223,372,036,854,775,808.

Właściciel zdał sobie sprawę, że typ danych bigint używa 8 bajtów za każdym razem, gdy jest używany. Typ danych int, który używa 4 bajtów, jest wystarczający. Jednak nie można zmienić typu danych obiektu sekwencji. Aby zmienić typ danych na int, właściciel musi usunąć obiekt sekwencji i ponownie utworzyć obiekt z poprawnym typem danych.

Zobacz też

CREATE SEQUENCE (Transact-SQL)
DROP SEQUENCE (Transact-SQL)
NEXT VALUE FOR (Transact-SQL)
numery sekwencji
sp_sequence_get_range (Transact-SQL)