ALTER TABLE (Transact-SQL)

Modyfikuje definicji tabela przez zmienianie, dodanie lub usunięcie kolumn i ograniczeń, ponowne przypisywanie partycji lub wyłączenie lub włączenie ograniczenia i wyzwalaczy.

Ikona łącza do tematuJęzyka Transact-SQL składni konwencje

Składnia

ALTER TABLE [ database_name . [ schema_name ] . | schema_name . ] table_name 
{ 
    ALTER COLUMN column_name 
    { 
        [ type_schema_name. ] type_name [ ( { precision [ , scale ] 
            | max | xml_schema_collection } ) ] 
        [ COLLATE collation_name ] 
        [ NULL | NOT NULL ] [ SPARSE ]
    | {ADD | DROP } 
        { ROWGUIDCOL | PERSISTED | NOT FOR REPLICATION | SPARSE }
    } 
        | [ WITH { CHECK | NOCHECK } ]

    | ADD 
    { 
        <column_definition>
      | <computed_column_definition>
      | <table_constraint> 
      | <column_set_definition> 
    } [ ,...n ]

    | DROP 
    { 
        [ CONSTRAINT ] constraint_name 
        [ WITH ( <drop_clustered_constraint_option> [ ,...n ] ) ]
        | COLUMN column_name 
    } [ ,...n ] 

    | [ WITH { CHECK | NOCHECK } ] { CHECK | NOCHECK } CONSTRAINT 
        { ALL | constraint_name [ ,...n ] } 

    | { ENABLE | DISABLE } TRIGGER 
        { ALL | trigger_name [ ,...n ] }

    | { ENABLE | DISABLE } CHANGE_TRACKING 
        [ WITH ( TRACK_COLUMNS_UPDATED = { ON | OFF } ) ]

    | SWITCH [ PARTITION source_partition_number_expression ]
        TO target_table 
        [ PARTITION target_partition_number_expression ]

    | SET ( FILESTREAM_ON = { partition_scheme_name | filegroup | 
                "default" | "NULL" } )

    | REBUILD 
      [ [PARTITION = ALL]
        [ WITH ( <rebuild_option> [ ,...n ] ) ] 
      | [ PARTITION = partition_number 
           [ WITH ( <single_partition_rebuild_option> [ ,...n ] )]
        ]
      ]

    | (<table_option>)
}
[ ; ]

<column_set_definition> ::= 
    column_set_name XML COLUMN_SET FOR ALL_SPARSE_COLUMNS

<drop_clustered_constraint_option> ::=  
    { 
        MAXDOP = max_degree_of_parallelism      | ONLINE = {ON | OFF }
      | MOVE TO { partition_scheme_name ( column_name ) | filegroup
          | "default" }
    }
<table_option> ::=
    {
        SET ( LOCK_ESCALATION = { AUTO | TABLE | DISABLE } )
    }

<single_partition_rebuild__option> ::=
{
      SORT_IN_TEMPDB = { ON | OFF }
    | MAXDOP = max_degree_of_parallelism
    | DATA_COMPRESSION = { NONE | ROW | PAGE} }
}

Argumenty

  • database_name
    Jest to nazwa bazy danych, w którym utworzono tabela .

  • schema_name
    Jest to nazwa schematu, do której należy tabela .

  • table_name
    Jest to nazwa tabela ma być zmieniony.Jeśli tabela nie znajduje się w bieżącej bazie danych lub nie jest zawarty w schemacie posiadane przez bieżącego użytkownika, bazy danych i schematu musi być wyraźnie określona.

  • ZMIEŃ KOLUMNĘ
    Określa, że nazwany kolumna mają być zmienione lub zmienione.Aby uzyskać więcej informacji, zobacz sp_dbcmptlevel (języka Transact-SQL).

    Zmodyfikowany kolumna nie może być dowolną z następujących czynności:

    • kolumna z timestamp typu danych.

    • ROWGUIDCOL dla tabela.

    • A obliczane kolumna lub w kolumnaobliczanej.

    • Używane do indeksu, chyba że kolumna jest varchar, nvarchar, lub varbinary Typ danych typ danych nie jest zmieniany, nowy rozmiar jest równy lub większy niż rozmiar stare i indeks jest nie wynikiem ograniczenia klucza podstawowego.

    • Stosowane w statystyce wygenerowany przez tworzenie statystyk instrukcja , chyba że kolumna jest varchar, nvarchar, lub varbinary Typ danych nie zostanie zmieniony typ danych i nowy rozmiar jest równy lub większy niż rozmiar stare lub jeśli kolumna została zmieniona z not null na null.Najpierw należy usunąć statystyki za pomocą statystyki UPUŚĆ instrukcja.Statystyki, które są generowane automatycznie przez optymalizator kwerendy są automatycznie usuwane przez instrukcji ALTER COLUMN.

    • Używany w ograniczenie klucza podstawowego lub ODWOŁAŃ [klucz OBCY].

    • Używany w ograniczenie wyboru lub UNIQUE.Jednakże dopuszcza się zmianę długości zmiennej długości kolumna używane w ograniczenie wyboru lub UNIQUE.

    • Skojarzone z domyślnej definicji.Jednakże długości, precyzji i skali kolumna można zmienić typ danych nie zostanie zmienione.

      Typ danych text, ntext i image kolumny można zmienić tylko w następujący sposób:

      • textto varchar(max), nvarchar(max), or xml

      • ntextto varchar(max), nvarchar(max), or xml

      • image Aby varbinary(max)

      Niektóre zmiany typu danych może spowodować zmiany w danych.Na przykład, zmiana nchar lub nvarchar kolumna , aby char lub varchar może spowodować, że konwersja znaków rozszerzonych.Aby uzyskać więcej informacji, zobacz CAST i CONVERT (Transact-SQL).Zmniejszanie, precyzji i skali kolumna może spowodować obcięcie danych.

      Nie można zmienić typu danych kolumna tabela partycjonowana .

  • column_name
    Jest to nazwa kolumna zmienione, dodane lub usunięte.column_namemoże zawierać maksymalnie 128 znaków.Dla nowej kolumny column_name może być pominięty w przypadku łamy utworzone za pomocą timestamp typu danych.Nazwa timestamp jest używana, jeśli nie column_name określonych dla timestamp Typ danych kolumna.

  • [ type_schema_name**.** ] type_name
    Nowy typ danych dla kolumnaw zmienionych lub typ danych dla dodanej kolumna.type_namenie można określić dla istniejących kolumn tabel podzielonym na partycje.type_namemoże to być jedna z następujących czynności:

    • A SQL Server typu danych systemu.

    • Na podstawie typu danych alias SQL Server typu danych systemu.Alias typy danych są tworzone z typu tworzenie instrukcja można było korzystać w definicji tabela .

    • A .NET Framework typ zdefiniowany przez użytkownikai schematu, do której należy..NET FrameworkTypy zdefiniowane przez użytkownika są tworzone z typu tworzenie instrukcja można było korzystać w definicji tabela .

    Oto kryteria dla type_name zmienionych kolumna:

    • Poprzedni typ danych musi być jawnie konwertowany na nowy typ danych.

    • type_namenie może być timestamp.

    • ANSI_NULL ustawienia domyślne są zawsze włączone dla instrukcji ALTER COLUMN; Jeśli nie określono kolumna jest nullable.

    • Spowodowałyby uzupełnienie jest zawsze włączone dla instrukcji ALTER COLUMN.

    • Jeśli zmodyfikowany kolumna tożsamości kolumna, new_data_type musi być typ danych, który obsługuje właściwość tożsamości.

    • Bieżące ustawienie ARITHABORT USTAWIONA jest ignorowana.ALTER TABLE działa tak, jakby ARITHABORT jest zestaw na.

    Ostrzeżenie

    Jeżeli nie określono klauzula COLLATE, zmiana typu danych kolumna spowoduje, że zmiana sortowanie domyślne sortowanie bazy danych.

  • precision
    Jest dokładność określony typ danych.Aby uzyskać więcej informacji na temat precyzji prawidłowe wartości, zobacz Precyzja, skala i długość (Transact-SQL).

  • scale
    Jest skala określony typ danych.Aby uzyskać więcej informacji na temat skali prawidłowe wartości, zobacz Precyzja, skala i długość (Transact-SQL).

  • max
    Stosuje się tylko do varchar, nvarchar, i varbinary typów danych do przechowywania 2 ^ 31-1 bajtów danych binarnych, znaków i danych Unicode.

  • xml_schema_collection
    Dotyczy wyłącznie xml Typ danych do kojarzenia schematu XML z typem.Przed wpisaniem xml kolumna schematu kolekcjaschematu kolekcja należy najpierw utworzyć w bazie danych za pomocą Utworzyć KOLEKCJI SCHEMATU XML.

  • SORTOWANIE< collation_name >
    Określa nową sortowanie zmienionych kolumna.Jeśli nie określono kolumna przypisano domyślne sortowanie bazy danych.Nazwa sortowania może być nazwa sortowanie systemu Windows lub nazwasortowanie SQL. Listy i uzyskać więcej informacji, zobacz Nazwa sortowania systemu Windows (Transact-SQL) i Nazwa sortowania SQL Server (Transact-SQL).

    klauzula COLLATE może służyć do zmiany ustawień sortowania tylko z kolumn char, varchar, nchar, i nvarchar typów danych.Aby zmienić typ danych zdefiniowany przez użytkownika alias kolumna sortowanie , należy wykonać jednostkowym sprawozdaniu ALTER TABLE kolumna , aby zmienić SQL Server Typ danych systemu i zmienić jego sortowaniei zmienić kolumna do typu danych alias .

    Instrukcji ALTER COLUMN nie może mieć sortowanie , zmienianie, jeśli jedna lub więcej z następujących warunków istnieją:

    • Jeśli ograniczenia CHECK kolumna zmienione odniesienia ograniczenia na klucz OBCY lub kolumny obliczane.

    • Dowolne indeksu na kolumnasą tworzone statystyki lub indeksu pełnotekstowego.Statystyki tworzone automatycznie na kolumna zmieniane są opuszczane zmianie kolumna sortowanie .

    • Jeśli kolumnaodwołuje związanych ze schematem widoku lub funkcja .

    Aby uzyskać więcej informacji, zobacz SORTOWANIE (Transact-SQL).

  • SPARSE NULL | NIEDOZWOLONE WARTOŚCI NULL
    Określa, czy kolumna jest rozrzedzony kolumna można wprowadzać wartości null .kolumna zmiany jest rozrzedzony kolumna, należy jawnie określić, że ta właściwość lub kolumna nonsparse kolumnazostanie przywrócona.Sparse kolumny nie wyznaczone jako NOT NULL.Konwertowanie kolumna z sparse do nonsparse lub nonsparse do rozrzedzenia blokady tabela na czas wykonywania polecenia.

    Zobacz dodatkowe ograniczenia oraz więcej informacji o kolumnach sparse i opcje dopuszczania wartości null Przy użyciu kolumn Sparse.

    Tylko wtedy, gdy mają one domyślne określone lub jeśli tabela jest pusta, można dodać kolumny nie dopuszczającej wartości null z instrukcji ALTER TABLE.NIE można określić wartość NULL dla kolumny obliczanej, tylko wtedy, gdy określony jest również PERSISTED.Jeśli nowa kolumna zezwala na wartości null i domyślnie nie jest określony, nowa kolumna zawiera wartość null dla każdego wiersza w tabela.Jeśli nowa kolumna zezwala na wartości null i domyślnej definicji dodaje się nową kolumnaz wartości mogą być używane do przechowywania wartości domyślne w nowej kolumna dla każdego istniejącego wiersza w tabela.

    Jeśli nowa kolumna nie zezwala na wartości null i tabela nie jest pusta, DOMYŚLNEJ definicji należy dodać nową kolumnai nowej kolumna ładuje się automatycznie w nowych kolumn w każdym wierszu istniejącą wartość domyślną.

    W instrukcji ALTER COLUMN, aby wymusić NOT NULL kolumna , aby zezwolić na wartości null , z wyjątkiem kolumny klucza podstawowego ograniczenia można określić wartość NULL.NIE można określić wartość NULL w instrukcji ALTER COLUMN, tylko wtedy, gdy kolumna zawiera wartości null , nie.Wartości null muszą zostać zaktualizowane do pewną wartość, aby zmienić kolumnę NULL jest niedozwolone, na przykład:

    UPDATE MyTable SET NullCol = N'some_value' WHERE NullCol IS NULL
    ALTER TABLE MyTable ALTER COLUMN NullCOl NVARCHAR(20) NOT NULL
    

    Tworzenie lub zmienianie tabela z instrukcji ALTER TABLE lub CREATE TABLE, ustawienia bazy danych i sesja wpływ i ewentualnie zastępują opcje dopuszczania wartości null typu danych, która jest używana w definicji kolumna .Zaleca się, aby zawsze jawnie zdefiniować kolumna jako NULL lub NOT NULL dla kolumn noncomputed.

    Dodać kolumna o typie danych zdefiniowane przez użytkownika zaleca się zdefiniowanie kolumna z tej samej opcje dopuszczania wartości null jako typ danych zdefiniowany przez użytkownika i określić wartość domyślną dla kolumna.Aby uzyskać więcej informacji, zobacz CREATE TABLE (Transact-SQL).

    Ostrzeżenie

    Jeśli wartość NULL lub nie NULL jest określany za pomocą instrukcji ALTER COLUMN new_data_type(precision,scale ])] musi być także określona.Jeśli typ danych, precyzji i skali nie są zmieniane, należy określić bieżące wartości kolumna .

  • [ {DODAĆ | ROWGUIDCOL UPUSZCZANIA}]
    Określa ROWGUIDCOL właściwość jest dodawana do lub usunięte z określonej kolumna.ROWGUIDCOL wskazuje, że kolumna jest wiersz GUID kolumna.Tylko jeden uniqueidentifier kolumna w tabela może być wyznaczony jako ROWGUIDCOL kolumnai ROWGUIDCOL właściwość można przypisać tylko do uniqueidentifier kolumna.ROWGUIDCOL nie można przypisać do kolumna typ danych zdefiniowany przez użytkownika.

    ROWGUIDCOL nie wymusza unikatowość wartości, które są przechowywane w kolumna i nie generuje automatycznie wartości dla nowych wierszy, które są wstawiane do tabela.Generowanie unikatowych wartości dla każdej kolumna, użyj NEWID funkcja w instrukcji INSERT lub określić NEWID funkcja jako domyślną dla kolumna.

  • [ {DODAĆ | UTRWALONE UPUSZCZANIA}]
    Określa, że PERSISTED właściwość jest dodawana do lub usunięte z określonej kolumna.kolumna musi być obliczana kolumna zdefiniowaną za pomocą deterministyczny wyrażenie.Dla kolumny określone jako PERSISTED Aparat baz danych fizycznie przechowuje obliczonych wartości w tabela i aktualizuje wartości po zaktualizowaniu innych kolumn, od których zależy kolumna obliczanej.Oznaczając kolumna obliczanej jako PERSISTED, można utworzyć indeksy na określonych wyrażeń, które są przewidywalne, ale nie dokładne kolumny obliczane.Aby uzyskać więcej informacji, zobacz Tworzenie indeksów kolumny obliczanej.

    Wszelkie obliczanej kolumna , używany jako partycjonowanie kolumna tabela partycjonowana muszą być wyraźnie oznakowane PERSISTED.

  • UPUŚĆ NIE DLA REPLIKACJI
    Określa, że wartości są zwiększane w kolumnach identyfikacyjnych podczas replikacja agentów wykonywania operacji wstawiania.Ta klauzula może być określony tylko wtedy, gdy column_name jest to kolumnaidentyfikacji.Aby uzyskać więcej informacji, zobacz Kontrolowanie ograniczenia, tożsamości i wyzwalaczy z nie dla replikacji.

  • ROZRZEDZONY
    Określa, czy kolumna mają być dodane lub usunięte jest rozrzedzony kolumna.Magazyn sparse kolumny jest zoptymalizowany dla wartości null .Sparse kolumny nie wyznaczone jako NOT NULL.Konwertowanie kolumna z sparse do nonsparse lub nonsparse do rozrzedzenia blokady tabela na czas wykonywania polecenia.

    Ostrzeżenie

    Należy określić SPARSE właściwość nonsparse kolumnazostanie przywrócone za każdym czas zmienić kolumnalub kolumna .

    Dodatkowe ograniczenia oraz więcej informacji o kolumnach sparse zobacz Przy użyciu kolumn Sparse.

  • Z WYBORU | Z NOCHECK
    Określa, czy dane w tabela jest lub nie jest sprawdzany na nowo dodane lub ponownego włączenia ograniczenie klucza OBCEGO lub wyboru.Jeśli nie określono, Z Sprawdź zakłada dla nowych ograniczeń i ponownego włączenia ograniczeń zakłada, że Z NOCHECK.

    Jeśli nie chcesz zweryfikować nowych ograniczeń wyboru lub klucza OBCEGO dla istniejących danych, należy użyć Z NOCHECK.Spowoduje to, z wyjątkiem przypadków, w rzadkich przypadkach nie jest zalecane.Nowe ograniczenie będą oceniane w wszystkich późniejszych aktualizacji danych.Naruszenie ograniczenia, które są odrzucane przez NOCHECK Z podczas dodawania ograniczenia może spowodować przyszłych aktualizacji kończy się niepowodzeniem, jeśli ich aktualizowania wierszy z danymi, które nie są zgodne z ograniczeniem.

    optymalizator kwerendy nie uważa się, że ograniczenia, które są zdefiniowane W NOCHECK.Takie ograniczenia są ignorowane, dopóki nie zostaną ponownie włączone przy użyciu instrukcji ALTER TABLE table wszystkie ograniczenia CHECK.

  • DODAWANIE
    Określa jeden lub więcej definicje kolumna , definicje obliczanej kolumna lub ograniczenia tabela są dodawane.

  • DROP {[CONSTRAINT] constraint_name | COLUMN column_name }
    Określa, że constraint_name lub column_name jest usuwana z tabela.Można wyświetlić wiele kolumn i ograniczeń.

    Zdefiniowane przez użytkownika lub dostarczanych przez system nazwę ograniczenia, można ustalić poprzez badanie sys.check_constraint, sys.default_constraints, sys.key_constraints, i sys.foreign_keys widoki wykazu.

    Nie można go usunąć ograniczenie na klucz podstawowy, jeśli w tabelaistnieje indeks XML.

    kolumna nie można usunąć, gdy jest to:

    • Używana w indeksie.

    • Używane w ograniczeniu wyboru, klucz OBCY, unikatowe lub klucza podstawowego.

    • Skojarzone ustawienie domyślne, które jest zdefiniowane przy użyciu słowa kluczowego domyślne lub związany z domyślnego obiektu.

    • Powiązane z reguły.

    Ostrzeżenie

    Upuszczanie kolumna nie odzyskania miejsca na dysku kolumna.Może zajść potrzeba odzyskania miejsca na dysku porzuconych kolumna , gdy rozmiar wiersza tabela znajduje się w pobliżu lub przekroczył limit.Odzyskać miejsce na tworzenie indeks klastrowany na tabela lub przebudowy istniejący indeks klastrowany za pomocą Zmianę INDEKSU.

  • Z <drop_clustered_constraint_option>
    Określa jedną lub więcej opcji ograniczenie upuszczania klastrowane są, zestaw.

  • MAXDOP =max_degree_of_parallelism
    Zastępuje max degree of parallelism konfiguracja opcji tylko na czas trwania operacji.Aby uzyskać więcej informacji, zobacz maksymalny stopień równoległości prostych opcji.

    Aby ograniczyć liczbę procesorów używanych w realizacji planu równoległego, należy użyć opcji MAXDOP.Maksymalna to 64 procesorów.

    max_degree_of_parallelismmoże to być jedna z następujących wartości:

    • 1
      Pomija generowanie planu równoległego.

    • >1
      Ogranicza maksymalną liczbę procesorów używanych w operacji indeksu równolegle do określonej liczby.

    • 0 (domyślnie)
      Używa rzeczywista liczba procesorów lub mniej oparte na bieżącym obciążenia systemu.

    Aby uzyskać więcej informacji, zobacz Konfigurowanie operacji równoległych indeksu.

    Ostrzeżenie

    Indeksu równoległa operacje są dostępne tylko w SQL Server wersji Enterprise, Developer i oceny.

  • ONLINE = { ON | OFF }
    Określa, czy tabele podstawowe i indeksy skojarzone są dostępne do modyfikacji kwerendy i danych podczas operacji indeksu.Domyślnie jest wyłączona.ODBUDUJ może być wykonane jako operacja ONLINE.

    • NA
      Długoterminowe blokady tabela nie są aktywne przez czas trwania operacji indeksu.Główne fazie operacji indeksu tylko intencji udziału (IS) blokada jest używana wtabela źródło. Dzięki temu kwerendy lub aktualizacje z tabela i indeksy, aby kontynuować.W momencie rozpoczęcia operacji udostępnione (S) blokada jest używana na obiekt źródło dla bardzo krótkim czas.Na końcu operacji przez krótki czasS (udostępniany) blokada jest nabywany źródło Jeśli tworzony jest indeks nieklastrowany ; lub SCH-M (modyfikacja schematu) blokada jest nabyte podczas tworzenia indeks klastrowany lub porzucone w trybie online i klastrowany lub indeks nieklastrowany są przebudowywane.ONLINE nie można zestaw na po utworzeniu indeks w lokalnej tabelatymczasowej.Tylko jednowątkowym STERTY Odbuduj operacja jest dozwolona.

    • WYŁĄCZANIE
      Blokady tabeli są stosowane na czas trwania operacji indeksu.Operację indeks w trybie offline, która tworzy, buduje ponownie, lub porzuca indeks klastrowanylub odbudowania lub spadnie indeks nieklastrowanynabywa modyfikacji (Sch-M) schematu blokada w tabela.Uniemożliwia to dostęp użytkownika do odpowiedniej tabela , na czas trwania operacji.Operacja indeks w trybie offline, który tworzy indeks nieklastrowany nabywa udostępnione (S) blokada w tabela.Zapobiega aktualizacji do podstawowej tabela , ale zezwala na operacje odczytu, takich jak instrukcje SELECT.Zezwala na operacje Odbuduj STERTY wielowątkowych.

    Aby uzyskać więcej informacji, zobacz Jak Online pracy operacji indeksu.Aby uzyskać więcej informacji na temat blokady zobacz Tryby Lock.

    Ostrzeżenie

    Operacje indeksu online są dostępne tylko w SQL Server wersji Enterprise, Developer i oceny.

  • MOVE TO { partition_scheme_name( column_name 1, ... n) | filegroup | "domyślną"" }
    Określa lokalizację Przenieś wiersze danych aktualnie liść poziom indeks klastrowany.tabela jest przenoszony do nowej lokalizacji.

    Ostrzeżenie

    W tym kontekście domyślnie nie jest słowem kluczowym.Jest to identyfikator domyślnej grupa plików i musi rozdzielane w Przenieś do "domyślne" lub Przenieś do domyślne[].Jeśli "domyślną" jest określona opcja QUOTED_IDENTIFIER musi być w bieżącej sesja.Jest to ustawienie domyślne.Aby uzyskać więcej informacji, zobacz ZESTAW QUOTED_IDENTIFIER (Transact-SQL).

  • { SPRAWDŹ, CZY | OGRANICZENIE NOCHECK}
    Określa, że constraint_name jest włączone lub wyłączone.Tej opcji należy używać tylko z ograniczenia klucza OBCEGO i wyboru.Po określeniu NOCHECK ograniczenie jest wyłączone i przyszłych Wstawia lub aktualizacje do kolumna nie są sprawdzane przy użyciu warunków ograniczenia.Domyślnie klucz podstawowy i ograniczenie typu UNIQUE, nie można wyłączyć.

  • ALL
    Określa, że wszystkie ograniczenia są wyłączone z opcją NOCHECK lub włączona opcja wyboru.

  • { WŁĄCZ | WYZWALACZ DISABLE}
    Określa, że trigger_name jest włączone lub wyłączone.Po wyłączeniu wyzwalacz jest nadal zdefiniowanych dla tabela; Jednak po instrukcji INSERT, UPDATE lub DELETE są wykonywane w tabela, akcje w wyzwalacz nie są prowadzone aż do ponownego włączenia wyzwalacza.

  • ALL
    Określa, że wszystkie wyzwalacze w tabela są włączone lub wyłączone.

  • trigger_name
    Określa nazwę wyzwalacza, aby włączyć lub wyłączyć.

  • { WŁĄCZ | CHANGE_TRACKING DISABLE}
    Określa, czy oledzenie zmian jest włączone wyłączone dla tabela.Domyślnie śledzenie zmian jest wyłączone.

    Ta opcja jest dostępna tylko wtedy, gdy oledzenie zmian jest włączona dla bazy danych.Aby uzyskać więcej informacji, zobacz ZMIENIA opcje zestawu bazy danych (Transact-SQL).

    Aby włączyć śledzenie zmian, tabela musi mieć kluczpodstawowy.

  • Z ( ) TRACK_COLUMNS_UPDATED = {ON | OFF } )
    Określa, czy Aparat baz danych ścieżki, które kolumny prześledzone zmiany zostały zaktualizowane.Wartością domyślną jest wyłączona.

  • Przełącznik [PARTYCJI source_partition_number_expression ] do [ schema_name. ] target_tableTarget_ PARTYCJIpartition_number_expression ]
    Przełącza blok danych w jednym z następujących sposobów:

    • Ponownie przypisuje wszystkie dane tabela jako partycję z już istniejącymi tabela partycjonowana.

    • Przełącza partycję z jednej tabela partycjonowana .

    • Ponownie przypisuje wszystkie dane w jednej partycji tabela partycjonowana do istniejącego nie-tabela partycjonowana.

    Jeśli table tabela partycjonowanajest source_partition_number_expression musi być określony.Jeśli target_table jest podzielony na partycje, target_partition_number_expression musi być określony.Jeśli ponowne przypisywanie danych tabelajako partycję z już istniejącymi tabela partycjonowanalub przełączania partycji z jednej tabela partycjonowana do innej miejsce docelowe partycji musi istnieć i musi być pusty.

    Jeśli ponowne przypisywanie jednej partycji danych do utworzenia pojedynczej tabela, miejsce docelowe tabela już musi zostać utworzony i musi być pusty.Zarówno źródłotabela lub partycji itabela miejsce docelowelub partycji, musi znajdować się w tej samej grupa plików. Odpowiednie indeksy lub partycji indeksu musi również przechowywane w tej samej grupa plików.Wiele dodatkowe ograniczenia dotyczą przełączania partycji.Aby uzyskać więcej informacji, zobacz Efektywne przesyłania danych przy użyciu przełączania partycji.tablei target_table nie może być taka sama.target_tablemoże być identyfikatorem wieloczęściowego.

    source_partition_number_expressioni target_partition_number_expression są stała wyrażeń, które można odwołać zmienne i funkcje.Obejmują one typ zdefiniowany przez użytkownika zmienne i funkcje zdefiniowane przez użytkownika.Nie można odwołać Transact-SQL wyrażeń.

    Ostrzeżenie

    Nie można użyć instrukcja SWITCH w zreplikowanych tabelach.

  • Ustaw ( ) FILESTREAM_ON = { partition_scheme_name | filestream_filegroup_name | "default" | "NULL" } )
    Określa, w której są przechowywane dane FILESTREAM.

    ALTER TABLE z zestawu FILESTREAM_ON klauzula powiedzie się tylko wtedy, gdy tabela nie ma FILESTREAM kolumn.Kolumny FILESTREAM można dodać przy użyciu drugiej instrukcjaALTER TABLE.

    Jeśli partition_scheme_name jest określony, zasady CREATE TABLE stosuje się.tabela powinny już być podzielone na partycje dla wiersza danych i jego schemat partycji muszą używać tej samej partycji funkcja i kolumn jako FILESTREAM schemat partycji.

    filestream_filegroup_nameOkreśla nazwę FILESTREAM grupa plików.grupa plików musi mieć jeden plik, który jest zdefiniowany dla grupa plików za pomocą Tworzenie bazy danych lub ALTER DATABASEjest wywoływaneinstrukcjalub błąd.

    "domyślną" określa FILESTREAM grupa plików z właściwośćdomyślnezestaw. Jeśli nie ma żadnych FILESTREAM grupa plików, błąd zostanie zaokrąglona.

    "NULL" określa zostaną usunięte wszystkie odwołania do FILESTREAM aplikacjami dla tabela .Wszystkie kolumny FILESTREAM musi najpierw usunięty.Należy użyć zestawu FILESTREAM_ON**= "NULL"** do usunięcia wszystkich danych FILESTREAM, które jest skojarzone z tabela.

  • Ustaw ( ) LOCK_ESCALATION = {AUTO | TABELA | Wyłącz} )
    Określa dozwolonych metod eskalację blokada dla tabela.

    • AUTOMATYCZNE
      Ta opcja pozwala na Aparat baz danych programu SQL Server do wybierz opcję blokada eskalacji ziarnistość odpowiednią dla schematu tabela .

      • Jeśli tabela jest podzielony na partycje, eskalację blokada będzie mógł partycji.Po blokada jest przekazany do partycji poziom, blokada nie zostanie przekazany później do tabeli ziarnistość.

      • Jeśli tabela nie jest podzielony na partycje, eskalację blokada zostaną wykonane do tabeli ziarnistość.

    • TABELA
      Eskalację blokady zostaną wykonane w tabela-poziom ziarnistość niezależnie od tego czy tabela jest podzielony na partycje lub nie na partycje.To zachowanie jest takie same, jak w SQL Server 2005.Tabela jest wartością domyślną.

    • WYŁĄCZ
      Zapobiega eskalację blokada w większości przypadków.Tabelapoziom blokowania nie są całkowicie zabronione.Na przykład, gdy skanowanie tabela , która ma indeks klastrowany w obszarze możliwy do serializacji poziom izolacji Aparat baz danych musi mieć tabela blokada , aby chronić integralność danych.

  • ODBUDUJ
    Za pomocą składni ODBUDOWAĆ Z odbudować całej tabela łącznie wszystkie partycje w tabela partycjonowana.Jeśli tabela ma indeks klastrowany, opcję REBUILD odtwarza indeks klastrowany.ODBUDUJ może być wykonane jako operacja ONLINE.

    Ponownie utworzyć pojedynczą partycję w tabela partycjonowanaza pomocą składni ODBUDOWAĆ PARTYCJI.

  • PARTYCJA = ALL
    Buduje ponownie wszystkie partycje przy zmianie ustawień kompresji partycji.

  • ODBUDUJ Z ( <rebuild_option> )
    Wszystkie opcje odnoszą się do tabela z indeks klastrowany.Jeśli tabela ma indeks klastrowany, struktura sterty jest tylko zagrożony niektóre opcje.

    Pełne opisy opcji Odbuduj zobacz index_option (języka Transact-SQL).

  • DATA_COMPRESSION
    Określa opcję kompresji danych dla określonej tabela, numer lub zakres partycji.Dostępne są następujące opcje:

    • BRAK
      Tabela lub określonej partycji nie są kompresowane.

    • WIERSZ
      Tabeli lub określone partycje są kompresowane przy użyciu kompresji wierszy.

    • STRONY
      Tabeli lub określone partycje są kompresowane przy użyciu kompresji strona .

    Aby odbudować wiele partycji w tym samym czas, zobacz index_option (języka Transact-SQL).Jeśli tabela ma indeks klastrowany, zmienianie kompresji danych przebudowuje sterty i zbudowania indeksów.Aby uzyskać więcej informacji dotyczących kompresji, zobacz Tworzenie skompresowanego tabel i indeksów i Omówienie kompresja UNICODE.

  • column_set_name ALL_SPARSE_COLUMNS DLA COLUMN_SET XML
    Jest nazwą kolumna zestaw.kolumnazestaw jest bez reprezentacji XML, który scala wszystkie sparse kolumny tabela w strukturze danych wyjściowych. Nie można dodać kolumna,zestaw zawiera rozrzedzone kolumny tabela . Aby uzyskać więcej informacji na temat zestawów kolumna zobacz Korzystanie z zestawów kolumny.

Uwagi

Jeśli nie ma żadnych planów wykonanie w pamięć podręczna procedury odwołanie do tabela, ALTER TABLE oznaczy je ponownie skompilowana na ich wykonanie następnego.

Zmiana rozmiaru kolumny

Długości, precyzji i skali kolumna można zmienić, określając nowy rozmiar dla typu danych kolumna w instrukcji ALTER COLUMN klauzula.Jeśli dane w kolumna, nowy rozmiar nie może być mniejszy niż maksymalny rozmiar danych.Ponadto kolumna nie mogą być definiowane w indeksie, chyba że kolumna jest varchar, nvarchar, lub varbinary Typ danych i indeks jest nie wynikiem ograniczenia klucza podstawowego.Zobacz przykład P.

Zamki i zmiany tabeli

Zmiany określone w instrukcji ALTER TABLE są wdrażane natychmiast.Jeśli zmiany wymagają modyfikacji wierszy w tabela, ALTER TABLE aktualizuje wiersze.ALTER TABLE nabywa schemat zmodyfikować blokada w tabela , aby upewnić się, że brak połączeń odwołać nawet metadane tabela podczas zmiany, z wyjątkiem operacji online indeksu, wymagających bardzo krótkich SCH-M blokada na końcu.W przypadku substancji ALTERPrzełącznik operacji blokada jest nabywany w tabeli źródło i miejsce docelowe .Modyfikacje tabela są rejestrowane i pełni odzyskać.Zmiany wpływają na wszystkie wiersze w bardzo dużych tabel, takich jak gubienie kolumna lub dodawanie NOT NULL kolumna z domyślnymi może zająć dużo czas i generować wiele rekordów dziennika.Tych instrukcji ALTER TABLE powinny zostać wykonane z taką samą starannością jak wszelkie INSERT, UPDATE lub usuwanie instrukcja , która ma wpływ na wiele wierszy.

Wykonanie planu równoległego

W SQL Server 2008 Enterprise, liczby procesorów zatrudnionych uruchomienie jednej zmiany tabeli dodać (indeks na podstawie) ograniczenie DROP (indeks klastrowany) lub instrukcja jest określana przez max degree of parallelismopcjakonfiguracja i bieżące obciążenie pracą. Jeśli Aparat baz danych wykryje, że system jest zajęty, stopień równoległości prostych operacji jest automatycznie obniżane przed rozpoczyna się wykonywanie instrukcja .Można ręcznie skonfigurować liczbę procesorów, które są używane do uruchamiania instrukcja przez określenie opcji MAXDOP.

Tabele podzielonym na partycje

Oprócz wykonywania operacji PRZEŁĄCZANIA, obejmujących tabel podzielonym na partycje, ALTER TABLE może służyć do zmiany stanu kolumn, ograniczenia i wyzwalaczy tabela partycjonowana tak samo, jak jest on używany dla tabel nonpartitioned.Jednak ta instrukcja nie można zmienić sposób, w jaki samej tabela jest podzielony na partycje.Na partycje tabela partycjonowana, użyj Zmienić schemat PARTYCJI i Zmiany funkcji PARTYCJI.Ponadto nie można zmienić typu danych kolumna tabela partycjonowana.

Ograniczenia dotyczące tabel z widokami związanych ze schematem

Ograniczenia, które stosuje się do instrukcji ALTER TABLE na tabelach z widokami związanych ze schematem są takie same, jak ograniczenia obecnie stosowane podczas modyfikowania tabel za pomocą prostego indeksu.Dodanie kolumna jest dozwolone.Jednakże usuwanie lub zmienianie kolumna , które uczestniczą w dowolnym widoku związanych ze schematem jest niedozwolone.Jeśli instrukcja ALTER TABLE wymaga, zmienianie kolumna w widoku związanych ze schematem, ALTER TABLE kończy się niepowodzeniem i Aparat baz danych wywołuje komunikat o błędzie.Aby uzyskać więcej informacji na temat Widoki indeksowane i powiązanie schematu, zobacz CREATE VIEW (Transact-SQL).

Dodawanie lub usuwanie wyzwalaczy na tabele bazowe nie dotyczy tworzenia widoku związanych ze schematem, która odwołuje się do tabel.

Indeksy i zmiany tabeli

Indeksy utworzone jako część ograniczenia są usuwane, gdy ograniczenie zostało porzucone.Indeksy, które zostały utworzone za pomocą CREATE INDEX musi porzucone z INDEKSEM UPUSZCZANIA.Zmiana INDEKSU instrukcja może służyć do odbudować indeks częścią definicji ograniczenia; ograniczenie nie ma być usunięte i ponownie dodany za pomocą instrukcji ALTER TABLE.

Należy usunąć wszystkie indeksy i ograniczenia na podstawie kolumna , można było usunąć kolumna .

Po usunięciu ograniczenia utworzony indeks klastrowany wiersze danych przechowywane w liść poziom indeks klastrowany są przechowywane w nieklastrowanym tabela.Można usunąć indeks klastrowany i przenieść wynikowej tabela do innej grupa plików lub schemat partycji w ramach pojedynczej transakcji przez określenie opcji Przenieś do.Przejdź do opcji ma następujące ograniczenia:

  • Przenieś do jest nieprawidłowy dla widoków indeksowanych lub zbudowania indeksów nie klastrowanych.

  • schemat partycji lub grupa plików musi już istnieć.

  • Jeśli Przenieś do nie jest określony, tabela zostanie umieszczony w ten sam schemat partycji lub grupa plików , jak został zdefiniowany dla indeks klastrowany.

Po upuszczeniu indeks klastrowanymożna określić w trybie ONLINE = opcji tak transakcji UPUŚĆ INDEKSU jest nie blok kwerend i zmiany w danych źródłowych i skojarzone zbudowania indeksów nie klastrowanych.

ONLINE = ON ma następujące ograniczenia:

  • ONLINE = na nie jest prawidłowy dla indeksów klastrowanych, które także są wyłączone.Wyłączone indeksy muszą usunięte za pomocą ONLINE = OFF.

  • Można upuszczać tylko jeden indeks w czas .

  • ONLINE = na nie jest prawidłowy dla widoków indeksowanych, zbudowania indeksów nie klastrowanych lub indeksy w lokalnych tabelach tymczasowych.

Upuść indeks klastrowanywymaga tymczasowego miejsca na dysku równa rozmiarowi istniejący indeks klastrowany .Ten dodatkowy obszar jest zwalniane natychmiast po zakończeniu operacji.

Ostrzeżenie

Opcje na liście w obszarze <drop_clustered_constraint_option> Stosowanie indeksów klastrowanych w tabelach i nie można stosować do indeksów klastrowanych w widokach lub nieklastrowany indeksy.

Replikowanie zmian schematu

Domyślnie, podczas wykonywania instrukcji ALTER TABLE na opublikowanych tabela na SQL Server Wydawca, że zmiany są propagowane do wszystkich SQL Server abonentów.Ta funkcja ma pewne ograniczenia i może być wyłączony.Aby uzyskać więcej informacji, zobacz Wprowadzanie zmian schematu na publikację baz danych.

Kompresja danych

Tabele systemowe nie można włączyć kompresję.Jeśli tabela jest sterty, operacja rebuild dla trybu ONLINE zostanie jeden wątek.Użyj trybu OFFLINE dla sterty wielowątkowych odbudować operacji.Aby uzyskać informacje o kompresji danych, zobacz Tworzenie skompresowanego tabel i indeksów.

Aby ocenić, jak zmiana stanu kompresji będą wpływać na tabela, indeks lub partycji, należy użyć sp_estimate_data_compression_savings procedura składowana.

Do tabel podzielonym na partycje, obowiązują następujące ograniczenia:

  • Nie można zmienić kompresja ustawienie jedną partycję, gdy tabela zawiera indeksy nonaligned.

  • ALTER TABLE <tabela> ODBUDOWAĆ PARTYCJI...Składnia przebudowuje określonej partycji.

  • ALTER TABLE <tabela> ODBUDOWAĆ Z...Składnia buduje ponownie wszystkie partycje.

Uprawnienia

Wymaga ZMIEŃ uprawnienia w tabela.

ALTER TABLE uprawnienia dotyczą obu tabel, które są zaangażowane w przełącznik ZMIENIA tabeli instrukcja.Dane, które są przełączane dziedziczy zabezpieczeń miejsce docelowe tabela.

Jeśli kolumny w instrukcja ALTER TABLE są zdefiniowane za wspólne language runtime (CLR) typ zdefiniowany przez użytkownika lub alias typu danych, wymagane jest uprawnienie odwołania typu.

Przykłady

A.Dodawanie nowej kolumna

Poniższy przykład dodaje kolumna , która zezwala na wartości null i nie ma żadnych wartości przez DOMYŚLNEJ definicji.W nowej kolumna, każdy wiersz będzie miał NULL.

CREATE TABLE dbo.doc_exa (column_a INT) ;
GO
ALTER TABLE dbo.doc_exa ADD column_b VARCHAR(20) NULL ;
GO
EXEC sp_help doc_exa ;
GO
DROP TABLE dbo.doc_exa ;
GO

B.Upuszczanie kolumna

Poniższy przykład modyfikuje tabela , aby usunąć kolumna.

CREATE TABLE dbo.doc_exb (column_a INT, column_b VARCHAR(20) NULL) ;
GO
ALTER TABLE dbo.doc_exb DROP COLUMN column_b ;
GO
EXEC sp_help doc_exb ;
GO
DROP TABLE dbo.doc_exb ;
GO

C.Zmiana typu danych kolumna

W poniższym przykładzie zmieniany kolumna tabela z INT do DECIMAL.

CREATE TABLE dbo.doc_exy (column_a INT ) ;
GO
INSERT INTO dbo.doc_exy (column_a) VALUES (10) ;
GO
ALTER TABLE dbo.doc_exy ALTER COLUMN column_a DECIMAL (5, 2) ;
GO
DROP TABLE dbo.doc_exy ;
GO

D.Dodawanie kolumna z ograniczeniem

W następującym przykładzie dodano nową kolumna z UNIQUE ograniczenie.

CREATE TABLE dbo.doc_exc (column_a INT) ;
GO
ALTER TABLE dbo.doc_exc ADD column_b VARCHAR(20) NULL 
    CONSTRAINT exb_unique UNIQUE ;
GO
EXEC sp_help doc_exc ;
GO
DROP TABLE dbo.doc_exc ;
GO

E.Dodawanie niezweryfikowane ograniczenie typu CHECK do istniejącej kolumna

Poniższy przykład dodaje ograniczenia do istniejącej kolumna w tabela.kolumna ma wartość naruszający ograniczenie.W związku z tym WITH NOCHECK jest używana uniemożliwiać ograniczenia wobec istniejących wierszy i umożliwiają ograniczenie do dodania.

CREATE TABLE dbo.doc_exd ( column_a INT) ;
GO
INSERT INTO dbo.doc_exd VALUES (-1) ;
GO
ALTER TABLE dbo.doc_exd WITH NOCHECK 
ADD CONSTRAINT exd_check CHECK (column_a > 1) ;
GO
EXEC sp_help doc_exd ;
GO
DROP TABLE dbo.doc_exd ;
GO

F.Dodawanie domyślne ograniczenie do istniejącej kolumna

Poniższy przykład tworzy tabela z dwiema kolumnami i wstawia wartości w pierwszej kolumna, a inne kolumna pozostanie wartość NULL.A DEFAULT ograniczenie zostanie następnie dodany do drugiej kolumna.Aby zweryfikować, że domyślnie jest stosowane, inną wartość jest wstawiany do pierwszej kolumna, a kwerenda tabela .

CREATE TABLE dbo.doc_exz ( column_a INT, column_b INT) ;
GO
INSERT INTO dbo.doc_exz (column_a)VALUES ( 7 ) ;
GO
ALTER TABLE dbo.doc_exz
ADD CONSTRAINT col_b_def
DEFAULT 50 FOR column_b ;
GO
INSERT INTO dbo.doc_exz (column_a) VALUES ( 10 ) ;
GO
SELECT * FROM dbo.doc_exz ;
GO
DROP TABLE dbo.doc_exz ;
GO

G.Dodając kilka kolumn z ograniczeniami

W następującym przykładzie dodano kilka kolumn z ograniczeniami zdefiniowane przy użyciu nowej kolumna.kolumna w pierwszym ma IDENTITYwłaściwość. Każdy wiersz w tabela ma nowe wartości pierwotnych w kolumnatożsamości.

CREATE TABLE dbo.doc_exe ( column_a INT CONSTRAINT column_a_un UNIQUE) ;
GO
ALTER TABLE dbo.doc_exe ADD 

-- Add a PRIMARY KEY identity column.
column_b INT IDENTITY
CONSTRAINT column_b_pk PRIMARY KEY, 

-- Add a column that references another column in the same table.
column_c INT NULL  
CONSTRAINT column_c_fk 
REFERENCES doc_exe(column_a),

-- Add a column with a constraint to enforce that 
-- nonnull data is in a valid telephone number format.
column_d VARCHAR(16) NULL 
CONSTRAINT column_d_chk
CHECK 
(column_d LIKE '[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]' OR
column_d LIKE
'([0-9][0-9][0-9]) [0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]'),

-- Add a nonnull column with a default.
column_e DECIMAL(3,3)
CONSTRAINT column_e_default
DEFAULT .081 ;
GO
EXEC sp_help doc_exe ;
GO
DROP TABLE dbo.doc_exe ;
GO

H.Dodawanie kolumna dopuszczającej wartości null z wartościami domyślnymi

W następującym przykładzie dodano kolumna dopuszczającej wartości null z DEFAULT definicji i zastosowania WITH VALUES dotyczące wartości dla każdego istniejącego wiersza w tabela.Jeśli z wartości nie jest używany, każdy wiersz ma wartość NULL w nowej kolumna.

USE AdventureWorks2008R2 ; 
GO
CREATE TABLE dbo.doc_exf ( column_a INT) ;
GO
INSERT INTO dbo.doc_exf VALUES (1) ;
GO
ALTER TABLE dbo.doc_exf 
ADD AddDate smalldatetime NULL
CONSTRAINT AddDateDflt
DEFAULT GETDATE() WITH VALUES ;
GO
DROP TABLE dbo.doc_exf ;
GO

I.Wyłączenie i ponowne włączenie ograniczenia

Następujący przykład wyłącza ograniczenie, które ogranicza wynagrodzeń, przyjęta w danych.NOCHECK CONSTRAINTużywane z ALTER TABLE Aby wyłączyć ograniczenie i umożliwić instrukcji insert, która zwykle naruszy ograniczenie.CHECK CONSTRAINTponownie włącza ograniczenie.

CREATE TABLE dbo.cnst_example 
(id INT NOT NULL,
 name VARCHAR(10) NOT NULL,
 salary MONEY NOT NULL
    CONSTRAINT salary_cap CHECK (salary < 100000)
);

-- Valid inserts
INSERT INTO dbo.cnst_example VALUES (1,'Joe Brown',65000);
INSERT INTO dbo.cnst_example VALUES (2,'Mary Smith',75000);

-- This insert violates the constraint.
INSERT INTO dbo.cnst_example VALUES (3,'Pat Jones',105000);

-- Disable the constraint and try again.
ALTER TABLE dbo.cnst_example NOCHECK CONSTRAINT salary_cap;
INSERT INTO dbo.cnst_example VALUES (3,'Pat Jones',105000);

-- Re-enable the constraint and try another insert; this will fail.
ALTER TABLE dbo.cnst_example CHECK CONSTRAINT salary_cap;
INSERT INTO dbo.cnst_example VALUES (4,'Eric James',110000) ;

J.Upuszczanie ograniczenia

W następującym przykładzie usunięto UNIQUE ograniczenie z tabela.

CREATE TABLE dbo.doc_exc ( column_a INT
CONSTRAINT my_constraint UNIQUE) ;
GO
ALTER TABLE dbo.doc_exc DROP CONSTRAINT my_constraint ;
GO
DROP TABLE dbo.doc_exc ;
GO

K.Przełączanie partycje między tabelami

Poniższy przykład tworzy tabela partycjonowana, przy założeniu, że dany schemat partycji myRangePS1 jest już utworzony w bazie danych.Dalej, nie-tabela partycjonowana jest tworzona z taką samą strukturę jak tabela partycjonowana i w tej samej grupa plików jako PARTITION 2 z tabela PartitionTable.Dane z PARTITION 2 z tabela PartitionTable jest następnie przełączany do tabela NonPartitionTable.

CREATE TABLE PartitionTable (col1 int, col2 char(10))
ON myRangePS1 (col1) ;
GO
CREATE TABLE NonPartitionTable (col1 int, col2 char(10))
ON test2fg ;
GO
ALTER TABLE PartitionTable SWITCH PARTITION 2 TO NonPartitionTable ;
GO

L.Wyłączenie i ponowne włączenie wyzwalacza

W poniższym przykładzie użyto DISABLE TRIGGER opcji ALTER TABLE do wyłączenia wyzwalacza i umożliwienia instrukcji insert, która zwykle naruszy wyzwalacza.ENABLE TRIGGERnastępnie jest używany ponownie wyzwalacza.

CREATE TABLE dbo.trig_example 
(id INT, 
name VARCHAR(12),
salary MONEY) ;
GO
-- Create the trigger.
CREATE TRIGGER dbo.trig1 ON dbo.trig_example FOR INSERT
AS
IF (SELECT COUNT(*) FROM INSERTED
WHERE salary > 100000) > 0
BEGIN
    print 'TRIG1 Error: you attempted to insert a salary > $100,000'
    ROLLBACK TRANSACTION
END ;
GO
-- Try an insert that violates the trigger.
INSERT INTO dbo.trig_example VALUES (1,'Pat Smith',100001) ;
GO
-- Disable the trigger.
ALTER TABLE dbo.trig_example DISABLE TRIGGER trig1 ;
GO
-- Try an insert that would typically violate the trigger.
INSERT INTO dbo.trig_example VALUES (2,'Chuck Jones',100001) ;
GO
-- Re-enable the trigger.
ALTER TABLE dbo.trig_example ENABLE TRIGGER trig1 ;
GO
-- Try an insert that violates the trigger.
INSERT INTO dbo.trig_example VALUES (3,'Mary Booth',100001) ;
GO

M.Utworzenie ograniczenia klucza podstawowego z opcjami indeksu

Poniższy przykład tworzy ograniczenie klucza podstawowego PK_TransactionHistoryArchive_TransactionID i ustawia opcje FILLFACTOR, ONLINE, i PAD_INDEX.Wynikowy indeks klastrowany będzie miał taką samą nazwę jak ograniczenie.

USE AdventureWorks2008R2;
GO
ALTER TABLE Production.TransactionHistoryArchive WITH NOCHECK 
ADD CONSTRAINT PK_TransactionHistoryArchive_TransactionID PRIMARY KEY CLUSTERED (TransactionID)
WITH (FILLFACTOR = 75, ONLINE = ON, PAD_INDEX = ON);
GO

RZECZOWNIKUpuszczanie ograniczenie klucza podstawowego w trybie ONLINE

W następującym przykładzie usunięto ograniczenie klucza podstawowego z ONLINE opcji zestaw ON.

USE AdventureWorks2008R2;
GO
ALTER TABLE Production.TransactionHistoryArchive
DROP CONSTRAINT PK_TransactionHistoryArchive_TransactionID
WITH (ONLINE = ON);
GO

O.Dodawanie i upuszczając ograniczenia na klucz OBCY

Poniższy przykład tworzy tabela ContactBackupi modyfikuje tabela— najpierw przez dodanie FOREIGN KEY ograniczenie odwołujący się do tabela Person, następnie według upuszczanie FOREIGN KEY ograniczenie.

USE AdventureWorks2008R2 ;
GO
CREATE TABLE Person.ContactBackup
(ContactID int) ;
GO
ALTER TABLE Person.ContactBackup
ADD CONSTRAINT FK_ContactBacup_Contact FOREIGN KEY (ContactID)
    REFERENCES Person.Person (BusinessEntityID) ;
ALTER TABLE Person.ContactBackup
DROP CONSTRAINT FK_ContactBacup_Contact ;
GO
DROP TABLE Person.ContactBackup ;

P.Zmiana rozmiaru kolumna

Poniższy przykład powoduje zwiększenie rozmiaru varchar kolumna i precyzji i skali decimal kolumna.Ponieważ kolumny zawierają dane, można tylko zwiększa rozmiar kolumna .Ponadto zauważyć, że col_a jest zdefiniowany w indeks unikatowy.Rozmiar col_a nadal można zwiększyć, ponieważ typ danych jest varchar i indeks jest nie wynikiem ograniczenia klucza podstawowego.

IF OBJECT_ID ( 'dbo.doc_exy', 'U' ) IS NOT NULL 
    DROP TABLE dbo.doc_exy;
GO
-- Create a two-column table with a unique index on the varchar column.
CREATE TABLE dbo.doc_exy ( col_a varchar(5) UNIQUE NOT NULL, col_b decimal (4,2));
GO
INSERT INTO dbo.doc_exy VALUES ('Test', 99.99);
GO
-- Verify the current column size.
SELECT name, TYPE_NAME(system_type_id), max_length, precision, scale
FROM sys.columns WHERE object_id = OBJECT_ID(N'dbo.doc_exy');
GO
-- Increase the size of the varchar column.
ALTER TABLE dbo.doc_exy ALTER COLUMN col_a varchar(25);
GO
-- Increase the scale and precision of the decimal column.
ALTER TABLE dbo.doc_exy ALTER COLUMN col_b decimal (10,4);
GO
-- Insert a new row.
INSERT INTO dbo.doc_exy VALUES ('MyNewColumnSize', 99999.9999) ;
GO
-- Verify the current column size.
SELECT name, TYPE_NAME(system_type_id), max_length, precision, scale
FROM sys.columns WHERE object_id = OBJECT_ID(N'dbo.doc_exy');

Q.Zezwalanie na tabelach podzielonym na partycje eskalację blokada

Poniższy przykład włącza eskalację blokada partycji poziom tabela partycjonowana.Jeśli tabela nie jest podzielony na partycje, tabeli poziomjest eskalację blokada .

ALTER TABLE T1 SET (LOCK_ESCALATION = AUTO);
GO

R.Konfigurowanie zmian w tabela

Poniższy przykład włącza oledzenie zmian Person.Person tabela w AdventureWorks2008R2 bazy danych.

USE AdventureWorks2008R2;
ALTER TABLE Person.Person
ENABLE CHANGE_TRACKING;

Poniższy przykład włącza śledzenie zmian i włącza śledzenie kolumn, które są aktualizowane podczas zmiany.

USE AdventureWorks2008R2;
ALTER TABLE Person.Person
ENABLE CHANGE_TRACKING
WITH (TRACK_COLUMNS_UPDATED = ON)

Następujący przykład wyłącza oledzenie zmian Person.Person tabela w AdventureWorks2008R2 bazy danych:

USE AdventureWorks2008R2;
ALTER TABLE Person.Person
DISABLE CHANGE_TRACKING;

S.Modyfikowanie tabela , aby zmienić kompresja

W poniższym przykładzie zmieniany kompresji nonpartitioned tabela.Sterty lub indeks klastrowany zostanie przebudowany.Jeśli tabela jest sterty, zostaną odbudowane wszystkich zbudowania indeksów nie klastrowanych.

ALTER TABLE T1 
REBUILD WITH (DATA_COMPRESSION = PAGE);

W poniższym przykładzie zmieniany kompresji tabela partycjonowana.REBUILD PARTITION = 1 Składni powoduje tylko numer partycji 1 wymagają przebudowania.

ALTER TABLE PartitionTable1 
REBUILD PARTITION = 1 WITH (DATA_COMPRESSION =  NONE) ;
GO

Tę samą operację, używając następującej składni alternatywny powoduje, że wszystkie partycje w tabela wymagają przebudowania.

ALTER TABLE PartitionTable1 
REBUILD PARTITION = ALL 
WITH (DATA_COMPRESSION = PAGE ON PARTITIONS(1) ) ;

Przykłady kompresji dodatkowych danych, zobacz Tworzenie skompresowanego tabel i indeksów.

T.Dodanie kolumnasparse

Następujące przykłady przedstawiają Dodawanie i modyfikowanie sparse kolumn w tabela T1.Kod, aby utworzyć tabela T1 jest w następujący sposób.

CREATE TABLE T1
(C1 int PRIMARY KEY,
C2 varchar(50) SPARSE NULL,
C3 int SPARSE NULL,
C4 int ) ;
GO

Aby dodać dodatkowe kolumnasparseC5, wykonać następującą instrukcja.

ALTER TABLE T1
ADD C5 char(100) SPARSE NULL ;
GO

Aby przekonwertować C4 -sparse kolumna sparse kolumna, wykonać następującą instrukcja.

ALTER TABLE T1
ALTER COLUMN C4 ADD SPARSE ;
GO

Aby przekonwertować C4 sparse kolumna nonsparse kolumna, wykonać następującą instrukcja.

ALTER TABLE T1
ALTER COLUMN C4 DROP SPARSE;
GO

U.Dodawanie kolumna,zestaw

Następujące przykłady przedstawiają Dodawanie kolumna do tabela T2.kolumnazestaw nie można dodać do tabela , która już zawiera rozrzedzone kolumny. Kod, aby utworzyć tabela T2 jest w następujący sposób.

CREATE TABLE T2
(C1 int PRIMARY KEY,
C2 varchar(50) NULL,
C3 int NULL,
C4 int ) ;
GO

Trzy następujące instrukcje dodawania kolumna zestaw o nazwie CS, a następnie zmodyfikować kolumny C2 i C3 do SPARSE.

ALTER TABLE T2
ADD CS XML COLUMN_SET FOR ALL_SPARSE_COLUMNS ;
GO

ALTER TABLE T2
ALTER COLUMN C2 ADD SPARSE ; 
GO

ALTER TABLE T2
ALTER COLUMN C3 ADD SPARSE ;
GO

V.Zmiana kolumna sortowanie

Poniższy przykład pokazuje sposób zmiany sortowanie kolumna.Najpierw utwórz tabela T3 z ustawień domyślnych użytkownika sortowania:

CREATE TABLE T3
(C1 int PRIMARY KEY,
C2 varchar(50) NULL,
C3 int NULL,
C4 int ) ;
GO

Dalej, kolumna C2 sortowanie jest zmieniana na Latin1_General_BIN.Należy zauważyć, że typ danych jest wymagane, mimo że nie ulega zmianie.

ALTER TABLE T3
ALTER COLUMN C2 varchar(50) COLLATE Latin1_General_BIN 
GO