ALTER TABLE (Transact-SQL)
tablo tanımını değiştirme, ekleme veya sütunları ve kısıtlamaları bölümleri yeniden atama veya devre dışı bırakma veya etkinleştirme kısıtlamaları ve tetikleyiciler bırakarak değiştirir.
Sözdizimi
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} }
}
Bağımsız değişkenler
database_name
tablo oluşturulduğu veritabanı adıdır.schema_name
tablo ait olduğu şema addır.table_name
Değiştirilecek tablo adıdır.tablo geçerli veritabanında değil veya geçerli kullanıcıya ait şema bulunmayan, veritabanı ve şema açıkça belirtilmesi gerekir.SÜTUN DEĞİŞTİRME
Adlandırılmış sütun değiştirilemez veya değiştirilmiş olduğunu belirtir.Daha fazla bilgi için, bkz. sp_dbcmptlevel (Transact-SQL).Değiştirilmiş bir sütun aşağıdakilerden herhangi biri olamaz:
Bir ' % s'sütun sütun içeren bir timestamp veri türü.
tabloiçin ROWGUIDCOL.
A sütun hesaplanan veya hesaplanan sütunkullanılır.
sütun bir dizinde kullanılan bir varchar, nvarchar, veya varbinary veri türü, veri türü değişti, yeni boyutu eski boyutundan büyük veya eşit ve dizin değil sonucu bir birincil anahtar kısıtlaması.
create STATISTICS deyim sütun olmadığı sürece oluşturulan istatistiklere kullanılan bir varchar, nvarchar, veya varbinary veri türü, veri türü değişmez ve yeni boyutu eski boyutundan büyük veya eşit veya sütun not null nullolarak değiştirilirse.İlk olarak, İSTATİSTİKLERİ drop deyimkullanarak istatistiklerini kaldırın.' % S'iyileştiricisi sorgu iyileştiricisi tarafından otomatik olarak oluşturulan istatistikleri alter column tarafından otomatik olarak bırakılır.
Bir birincil anahtar veya [yabancı anahtar] başvuruları kısıtlaması kullanılır.
Bir onay veya benzersiz kısıtlama kullanılır.Bununla birlikte, bir onay veya benzersiz kısıtlama kullanılan değişken uzunlukta sütun uzunluğunu değiştirme izin verilir.
Bir varsayılan ilişkili.Veri türü değişmez, ancak, uzunluk, duyarlık veya sütun ölçeğini değiştirebilirsiniz.
Veri türü text, ntext ve image Sütunlar yalnızca aşağıdaki yollarla değiştirilebilir:
textto varchar(max), nvarchar(max), or xml
ntextto varchar(max), nvarchar(max), or xml
image Kime varbinary(max)
Bazı veri türü değişiklikleri verilerde değişiklik neden olabilir.Örneğin, değiştirme bir nchar veya nvarchar sütun char veya varchar neden dönüştürme işlemi genişletilmiş karakterler.Daha fazla bilgi için, bkz. CAST ve CONVERT (Transact-SQL).Bir sütun duyarlılık veya azaltma veri kesilmesi neden olabilir.
bölümlenmiş tablo sütun veri türü değiştirilemez.
column_name
Değiştirilen, eklenen veya bırakılan sütun addır.column_nameen fazla 128 karakter olabilir.Yeni makaleler için column_name ile oluşturulan sütunlar için atlanmış bir timestamp veri türü.Adı timestamp , hiçbir kullanılır column_name için belirtilen bir timestamp veri türü sütun.[ type_schema_name**.** ] type_name
Değişen sütuniçin yeni veri türü veya eklenen sütunveri türü.type_nameVarolan bir bölümlenmiş tabloları sütunlar için belirtilemez.type_nameaşağıdakilerden herhangi biri olabilir:A SQL Server Sistem veri türü.
Bir diğer ad veri türü temel alan bir SQL Server Sistem veri türü.Diğer veri türleri tablo tanımında kullanılmadan önce create type deyim ile oluşturulur.
A .NET Framework kullanıcı tanımlı türve ait olduğu şema..NET Frameworkbir tablo tanımında kullanılmadan önce kullanıcı tanımlı türler create type deyim ile oluşturulur.
Aşağıdaki ölçütleri olan type_name , değiştirilmiş bir sütun:
Önceki veri türünü yeni veri türüne örtük olarak dönüştürülebilir olmalıdır.
type_nameolamaz timestamp.
ANSI_NULL varsayılanları her zaman alter column bulunan; belirtilmezse, sütun NULL olur.
ANSI_PADDING doldurma her zaman alter column açık'tır.
Değiştirilmiş bir sütun kimlik sütun, ise new_data_type kimlik özelliğidestekleyen bir veri türü olmalıdır.
set ARITHABORT için geçerli ayarları dikkate alınmaz.ARITHABORT küme açık olduğu gibi alter table çalışır.
Not
collate yan tümce belirtilmezse, bir sütun veri türünü değiştirme veritabanının varsayılan harmanlama harmanlama değişiklik neden olur.
precision
Belirtilen veri türü duyarlık olur.Geçerli kesinlik değerleri hakkında daha fazla bilgi için bkz: Duyarlık, ölçek ve uzunluk (Transact-SQL).scale
Belirtilen veri türünün ölçeği ' dir.Geçerli ölçek değerleri hakkında daha fazla bilgi için bkz: Duyarlık, ölçek ve uzunluk (Transact-SQL).max
Yalnızca için geçerlidir varchar, nvarchar, ve varbinary veri türlerini depolamak 2 ^ 31-1 bayt karakter, ikili veri ve Unicode veri.xml_schema_collection
Yalnızca için geçerlidir xml veri türü ilişkilendirme bir xml şeması türü.Yazmadan önce bir xml sütun şema koleksiyonşema koleksiyon önce oluşturulmalıdır kullanarak veritabanındaki xml şema KOLEKSİYONU oluşturmak.HARMANLAMA< collation_name >
Değişen sütuniçin yeni harmanlama belirtir.Belirtilmezse, sütun veritabanının varsayılan harmanlama atanır.Harmanlama adı, bir Windows harmanlama adı veya bir SQL harmanlama adı olabilir.Ve daha fazla bilgi için bkz: Windows harmanlaması adı (Transact-SQL) ve SQL Server harmanlama adı (Transact-SQL).collate yan tümce yalnızca sütunların harmanlamaları değiştirmek için kullanılan char, varchar, nchar, ve nvarchar veri türü.diğer ad kullanıcı tanımlı veri türü sütun harmanlama değiştirmek için sütun değiştirmek için yürütmek ayrı alter table deyimleri gerekir bir SQL Server sistem verileri yazın ve, harmanlamave sonra geçin ' % s'sütun sütun geri için bir diğer ad veri türü.
alter column harmanlama varsa değiştirme olamaz veya daha aşağıdaki koşulları:
DENETİM kısıtlamasını, değişen sütun yabancı anahtar kısıtlamasını veya hesaplanmış sütunları başvuru.
' % S'sütun sütunüzerinde herhangi bir dizin, istatistik veya tam metin dizini oluşturulmuş olması durumunda.sütunharmanlama değiştirilirse değişti sütun otomatik olarak oluşturulan istatistikleri bırakılır.
Şemaya bağlı görünüm veya işlev sütunbaşvuru durumunda.
Daha fazla bilgi için, bkz. HARMANLAMA (Transact-SQL).
SEYREK NULL | NOT NULL
sütun seyrek sütun veya null değerleri kabul olup olmadığını belirtir.Değiştirilecek sütun seyrek sütunise, bu özellik veya sütun için sütunnonsparse döner açıkça belirtmeniz gerekir.Seyrek sütunları olamaz belirtilen not null olarak.Bir sütun nonsparse için seyrek veya seyrek için nonsparse kilitleri komut yürütme süresince tablo dönüştürülüyor.Ek kısıtlamalar ve seyrek sütunları ve null atanabilirlikhakkında daha fazla bilgi için bkz: Seyrek sütunlar kullanma.
Yalnızca belirtilen varsayılan varsa veya tablo boşsa, null değerlere izin vermeyen sütunları alter table ile eklenebilir.not null yalnızca PERSISTED de belirtilmişse hesaplanan sütunlar için belirtilebilir.Yeni bir sütun null değerleri ve varsayılan belirtilen veriyorsa, null değer tabloher satır için yeni bir sütun içerir.Yeni bir sütun null değerleri ve varsayılan tanımını veriyorsa eklenir yeni bir sütun, değerleri ile tablovarolan her satır için yeni sütun varsayılan değeri depolamak için kullanılabilir.
Yeni bir sütun null değerlere izin vermez ve tablo boş değil, varsayılan tanımını yeni bir sütuneklenmesi ve yeni bir sütun , varolan her satırdaki yeni sütunlar varsayılan değer otomatik olarak yükler.
null PRIMARY key kısıtlamaları sütun haricinde null değerlere izin vermek için bir not null sütun zorlamak için alter COLUMN'de belirtilebilir.not null sütun null değer içermiyorsa alter column belirtilebilir.alter sütunu null, örneğin verilmeyen önce bazı değeri null değerleri güncelleştirilmelidir:
UPDATE MyTable SET NullCol = N'some_value' WHERE NullCol IS NULL ALTER TABLE MyTable ALTER COLUMN NullCOl NVARCHAR(20) NOT NULL
Oluşturduğunuzda veya create table veya alter table deyimi içeren bir tablo alter veritabanı ve oturum ayarlarını etkileyen ve büyük olasılıkla veri türünde bir sütun tanımında kullanılan null atanabilirlik geçersiz kılar.Bir sütun null her zaman açıkça tanımlamak veya not null noncomputed sütunlar için önerilir.
Bir kullanıcı tanımlı veri türüne sahip bir sütun eklerseniz, kullanıcı tanımlı veri yazın ve sütuniçin varsayılan değer belirtmek gibi sütun ile aynı null atanabilirlik tanımlamak öneririz.Daha fazla bilgi için, bkz. CREATE TABLE (Transact-SQL).
Not
İse null veya not null alter column ile belirtilen new_data_type(precision,scale ])] de belirtilmelidir.Veri türü, duyarlık ve ölçek değiştirilmez, geçerli sütun değerlerini belirtin.
[ {ADD | BIRAK} ROWGUIDCOL]
ROWGUIDCOL özellik eklenen veya bırakılan belirtilen sütunbelirtir.ROWGUIDCOL, sütun satır GUID sütunolduğunu gösterir.Tek bir uniqueidentifier tablo hersütun belirlenmiş ROWGUIDCOL sütunolarak ve ROWGUIDCOL özellik yalnızca atanabilir bir uniqueidentifiersütun. ROWGUIDCOL bir sütun kullanıcı tanımlı veri türü atanamaz.ROWGUIDCOL sütun depolanan değerleri benzersizliğini zorlamaz ve tabloeklenen yeni satırlar için değerleri otomatik olarak oluşturmaz.Her sütuniçin benzersiz değerler oluşturmak için NEWID işlev Insert deyimlerini kullanın ya da sütuniçin varsayılan olarak NEWID işlev belirtin.
[ {ADD | KALICI AÇILAN}]
PERSISTED özellik eklenen veya bırakılan belirtilen sütunbelirtir.sütun bir ifadedeterministic ile tanımlanan hesaplanan bir sütun olmalıdır.PERSISTED belirtilen sütunlar için Veritabanı Altyapısı fiziksel olarak hesaplanan değerleri tablo depolar ve hesaplanmış bir sütun bağımlı olduğu diğer sütunlara güncelleştirilme zamanını değerleri güncelleştirir.Hesaplanan sütun PERSISTED olarak işaretleyerek, hesaplanan sütunlar deterministic ancak değil kesin ifadeler üzerinde tanımlı dizinler oluşturabilirsiniz.Daha fazla bilgi için, bkz. Dizinler üzerinde hesaplanan sütunlar oluşturma.bölümlemesütun bölümlenmiş tablo olarak kullanılan hesaplanmış sütun PERSISTED açıkça işaretlenmelidir.
ÇOĞALTMA İÇİN DEĞİL BIRAKMA
çoğaltma aracıları ekleme işlemi gerçekleştirdiğinizde kimlik sütunlarının değerleri artırılır belirtir.Bu yan tümce yalnızca belirtilebilir column_name kimlik sütunolan.Daha fazla bilgi için, bkz. Denetleme sınırlamaları, kimlikleri ve tetikleyiciler not ile çoğaltma.SEYREK
Eklenen veya bırakılan sütun seyrek sütunolduğunu belirtir.Depolama seyrek sütun null değerler için optimize edilmiştir.Seyrek sütunları olamaz belirtilen not null olarak.Bir sütun nonsparse için seyrek veya seyrek için nonsparse kilitleri komut yürütme süresince tablo dönüştürülüyor.Not
sütunveya sütun alter her saat için nonsparse bir sütundöner SEYREK özellik belirtmeniz gerekir.
Ek kısıtlamalar ve seyrek sütunları hakkında daha fazla bilgi için bkz: Seyrek sütunlar kullanma.
ONAY İLE | İLE NOCHECK
tablo veri veya yeni eklenen veya yeniden etkinleştirildikten bağlantısı yabancı anahtarı veya onay kısıtlama karşı doğrulanmaz belirtir.Yoksa belirtilen GÖRÜŞÜN yeni kısıtlamalar için kabul edilir ve ile nocheck yeniden etkinleştirildikten bağlantısı kısıtlamalarını kabul edilir.Varolan verilere karşı yeni onay veya yabancı anahtar kısıtlamalarını doğrulama istemiyorsanız ile nocheck kullanın.Nadiren de olsa, bunun dışında yapılması önerilmez.Yeni kısıtlamayı daha sonra tüm veri güncelleştirmelerini değerlendirilecek.Kısıtlamayı eklendiğinde, ile nocheck tarafından bastırılmış herhangi bir kısıtlama ihlali bunlar sınırlamayla uymuyor verilerle satır güncelleştirme başarısız Gelecekteki güncelleştirmelerin neden olabilir.
sorgu iyileştiricisi olan kısıtlamalar ile nocheck tanımlanan dikkate almaz.alter table kullanarak bunlar etkinleştirilebilir kadar gibi sınırlamalar göz ardı table check kısıtlaması.
ADD
Bir veya daha fazla sütun tanımları, hesaplanan sütun tanımları veya tablo kısıtlamaları eklendiğini belirtir.drop {[KISITLAMA] constraint_name | COLUMN column_name }
Belirleyen constraint_name veya column_name tablokaldırıldı.Birden çok sütun ve kısıtlamaları listelenebilir.Kullanıcı tanımlı veya sistem tarafından sağlanan kısıtlamanın adını sorgulayarak belirlenebilir sys.check_constraint, sys.default_constraints, sys.key_constraints, ve sys.foreign_keys katalog görünümleri.
Bir xml dizin tablovarsa PRIMARY key kısıtlaması bırakılan olamaz.
Bir sütun bırakılan olduğunda:
Bir dizinde kullanılmış.
Bir onay, FOREIGN key, UNIQUE veya birincil anahtar kısıtlaması kullanılır.
Varsayılan anahtar sözcüğüyle tanımlanan veya bir varsayılan nesnesi bağlı bir varsayılan ilişkili.
Bir kurala bağlı.
Not
Bir sütun bırakarak, sütunkullanılan disk alanını boşaltmak değil.tablo satır boyutunu yakın olduğunda veya aştı, sınırına bırakılan sütun kullanılan disk alanını boşaltmak zorunda kalabilirsiniz.kümelenmiş dizin tablo oluşturarak veya kullanarak varolan bir kümelenmiş dizin yeniden oluşturuluyor yerinizi alter INDEX.
İLE <drop_clustered_constraint_option>
Bir veya daha fazla alt kümelenmiş kısıtlama seçeneklerini kümeiçin olduğunu belirtir.MAXDOP =max_degree_of_parallelism
Geçersiz kılar max degree of parallelism yapılandırma seçeneği yalnızca işlem süresi için.Daha fazla bilgi için, bkz. en büyük ölçüde parallelism seçeneği.maxdop seçeneği paralel planı yürütme kullanılan işlemci sayısını sınırlamak için kullanın.En fazla 64 işlemci ' dir.
max_degree_of_parallelismAşağıdaki değerlerden biri olabilir:
1
Paralel planı oluşturma bastırır.>1
Belirtilen rakama paralel dizin işleminde kullanılan işlemcilerin sayısı sınırlar.0 (varsayılan)
Gerçek işlemci sayısını veya geçerli sistem iş yükünün üzerinde göre daha az kullanır.
Daha fazla bilgi için, bkz. Paralel dizin işlemleri yapılandırma.
Not
Paralel dizin işlemleri, yalnızca SQL Server kuruluş, Developer ve değerlendirme sürümleri.
ONLINE = { ON | OFF }
Temel alınan tablo ve ilişkili dizinler dizin işlemi sırasında sorguları ve veri değişikliği için kullanılabilir olup olmadığını belirtir.Varsayılan kapalı'dır.YENİDEN çevrimiçi işlem gerçekleştirilebilir.ON
Dizini işlem süresi için uzun süreli tablo kilitleri tutulmuyor.Ana dizin işlem aşamasında, bir hedefi paylaşım (Is) kilit yalnızca kaynak tablotutulur.Bu sorguları veya temel tablo ve dizinleri devam etmek için güncelleştirmeler sağlar.İşlem başlangıcında, paylaşılan (s) kilit kaynak nesnesi çok kısa bir saatiçin tutulur.Kısa saatiçin işlem sonunda s (paylaşılan) kilit kümelenmemiş dizin oluşturulursa kaynak alındığını; ya da kümelenmiş dizin oluşturulduğunda veya çevrimiçi bırakılan ve kümelenmiş sch-m (şema değiştirme) kilit alım veya kümelenmemiş dizin şu anda oluşturulmaktadır.Yerel geçici tabloüzerinde bir dizin oluşturulduğunda çevrimiçi küme açık olamaz.Yalnızca tek iş parçacıklı yığın yeniden işleme izin verilir.KAPALI
Tablo kilitleri dizini işlem süresi için uygulanır.tabloşema değişikliği (Sch-m) kilit oluşturan, yeniden oluşturur, veya kümelenmiş dizindüşünceye veya yeniden oluşturur veya kümelenmemiş dizindüşünceye çevrimdışı dizin işlemi kapsar.Bu tüm kullanıcı erişimi için temel tablo işlemi süresince önler.kümelenmemiş dizin oluşturur bir çevrimdışı dizin işlem tablo kilit paylaşılan (s) kapsar.Bu güncelleştirmeler alttaki tablo engeller ancak select deyimleri gibi okuma işlemleri.Çok kanallı yığın yeniden oluşturma işlemlerini sağlar.
Daha fazla bilgi için, bkz. Dizin Operations nasıl çevrimiçi çalışma.Kilitleri hakkında daha fazla bilgi için bkz: Kilit modları.
Not
Çevrimiçi dizin işlemleri, yalnızca SQL Server kuruluş, Developer ve değerlendirme sürümleri.
MOVE TO { partition_scheme_name( column_name 1, ... n) | filegroup | "varsayılan"" }
Veri satırları şu anda yaprak düzey kümelenmiş dizintaşımak için bir konumu belirtir.tablo yeni konuma taşınır.Not
Bu bağlamda, varsayılan anahtar sözcük değil.Varsayılan dosya grubu için bir tanımlayıcıdır ve, gibi taşımak için ayrılmış gerekir "varsayılan" ya da taşımak için varsayılan[]."Varsayılan" belirtilmişse, QUOTED_IDENTIFIER seçeneği geçerli oturumiçin açık olması gerekir.Bu varsayılan ayardır.Daha fazla bilgi için, bkz. set QUOTED_IDENTIFIER (Transact-SQL).
{ KONTROL EDİN | NOCHECK} KISITLAMASI
Belirleyen constraint_name etkin veya devre dışı bırakıldı.Bu seçenek yalnızca, yabancı anahtar ve onay kısıtlamaları ile kullanılabilir.nocheck belirtildiğinde sınırlamadır ve gelecekte devre ekler veya güncelleştirmeleri sütun kısıtlaması koşullara karşı doğrulanmaz.Varsayılan, birincil anahtar ve benzersiz kısıtlamaları devre dışı bırakılamaz.ALL
Tüm kısıtlamalar ile nocheck seçeneği devre dışı veya onay seçeneği etkin olduğunu belirtir.{ ENABLE | TETİKLEYİCİ DEVRE DIŞI BIRAK}
Belirleyen trigger_name etkin veya devre dışı bırakıldı.Tetikleyici devre dışı bırakıldığında hala ' % s'tablo tabloiçin tanımlanır; Ancak, ne zaman tablo, Tetikleyici eylemleri INSERT, update veya delete deyimleri çalıştırılır değil gerçekleştirilmesini tetikleyici yeniden etkinleştirilinceye kadar.ALL
Tüm tetikleyiciler tablo etkin veya devre dışı olduğunu belirtir.trigger_name
Devre dışı bırakmak veya etkinleştirmek için tetikleyici adını belirtir.{ ENABLE | DISABLE} CHANGE_TRACKING
Değişiklik izleme tabloetkin devre dışı olup olmadığını belirtir.Varsayılan olarak, değişiklik izlemeyi devre dışı bırakılır.Bu seçenek, yalnızca değişiklik izleme için veritabanı etkinleştirildiğinde kullanılabilir.Daha fazla bilgi için, bkz. alter database set seçenekleri (Transact-SQL).
Değişiklik izlemeyi etkinleştirmek için tablo birincil anahtarolmalıdır.
İLE ( ) track_columns_updated = {on | OFF } )
Belirtir olup olmadığını Veritabanı Altyapısı , izlenen sütunları değiştirme parçaları güncelleştirildi.Varsayılan değer kapalı'dır.ANAHTAR [Bölüm source_partition_number_expression ] Kime [ schema_name. ] target_tableBölüm target_partition_number_expression ]
Veri blok , aşağıdaki yollardan birinde geçer:Tüm verilerin bir tablo zaten varolan bir bölümlenmiş tablobir bölümü olarak yeniden atar.
Bir bölümlenmiş tablo bir bölümünden diğerine geçer.
Olmayan tüm verileri varolan bir bölümlenmiş tablo tek bir bölümde yeniden atar-bölümlenmiş tablo.
table bölümlenmiş tablo source_partition_number_expression belirtilmelidir.target_table Bölümlenmiş, target_partition_number_expression belirtilmelidir.Varsa bir tabloverilerinin bir zaten varolan bölümlenmiş tabloiçin bölüm yeniden atama veya bir bölümlenmiş tablo bir bölümünden diğerine hedef değiştirme bölümü bulunmalıdır ve boş olmalıdır.
Tek bir tablooluşturmak üzere bir bölümünün veri yeniden atama, hedef tablo zaten oluşturulmalı ve boş olmalıdır.Hem kaynak tablo veya bölüm ve hedef tablo veya bölüm, aynı dosya grubuiçinde bulunmalıdır.Karşılık gelen dizin veya dizin bölümleri aynı dosya grubuiçinde de alması gerekir.Bölüm geçiş için birçok ek kısıtlamalar uygulanır.Daha fazla bilgi için, bkz. Bölüm Geçişi kullanarak verimli veri aktarma.tableve target_table aynı olamaz.target_tableparçalı bir tanımlayıcı olabilir.
source_partition_number_expressionve target_partition_number_expression olan sabit ifadelere değişkenleri ve başvuruişlevleri.Bunlar kullanıcı tanımlı tür değişkenleri ve kullanıcı tanımlı işlevler içerir.Başvuru yapamazsınız Transact-SQL ifadeler.
Not
Çoğaltılan tablolarda SWITCH deyim kullanamazsınız.
set ( ) FILESTREAM_ON = { partition_scheme_name | filestream_filegroup_name | "default" | "NULL" } )
FILESTREAM verilerin depolandığı belirtir.Yalnızca tablo FILESTREAM sütun varsa, alter table set FILESTREAM_ON yan tümce ile başarılı olur.FILESTREAM sütunları, ikinci bir alter table deyimkullanılarak eklenebilir.
partition_scheme_name Belirtilen kuralları create table uygulanır.Zaten tablo için satır veri bölümlenmiş ve onun bölümleme düzeni aynı bölüm işlev ve sütunlar FILESTREAM bölümleme düzeniolarak kullanmalıdır.
filestream_filegroup_nameFILESTREAM dosya grubuadını belirtir.dosya grubu dosya grubu için tanımlanan bir dosya kullanarak olmalıdır bir create database veya alter databasedeyimveya bir hata neden oldu.
"varsayılan" varsayılan özellikkümeile FILESTREAM dosya grubu belirtir. Hiçbir FILESTREAM dosya grubuise, bir hata ortaya çıkar.
"null" FILESTREAM filegroups tablo için tüm başvuruları kaldırılır belirtir.Öncelikle tüm FILESTREAM sütunları bırakılan gerekir.FILESTREAM_ON KÜMESİ kullanmanız gerekir**= "null"** bir tabloile ilişkili tüm FILESTREAM veriler silinecek.
set ( ) LOCK_ESCALATION = {otomatik | TABLO | Devre dışı bırak} )
kilit etkinleşmesini tabloiçin izin verilen yöntemlerini belirtir.OTOMATİK
Bu seçenek verir SQL Server Veritabanı Altyapısı kilit yükseltme taneciklik için tablo şema uygun seçmek içintablo bölümlere ayrılmışsa, kilit etkinleşmesini bölüme verilir.kilit bölümleme düzeyaktarılana sonra kilit daha sonra tablo taneciklikiçin aktarılana değil.
tablo bölümlenmiş değil, kilit etkinleşmesini tablo taneciklikiçin yapılır.
TABLO
Kilit etkinleşmesini tablo bölümlenmiş ya da olmayan bölümlenmiş tablo-düzeytaneciklik bakılmaksızın yapılır. Bu davranış aynı olan SQL Server 2005.Tablo varsayılan değerdir.DEVRE DIŞI BIRAKMA
Çoğu durumda kilit etkinleşmesini engeller.Tablodüzey kilitleri tamamen izin verilmiyor değil.Örneğin, ne zaman size tarama seri hale getirilebilir yalıtım düzeyialtında yok kümelenmiş dizin içeren bir tablo Veritabanı Altyapısı veri bütünlüğükorumak için bir tablokilit izlemelisiniz.
YENİDEN OLUŞTURMA
YENİDEN ile sözdizimi bölümlenmiş tablotüm bölümler de dahil olmak üzere tüm tablo yeniden oluşturmak için kullanın.tablo bir kümelenmiş dizinvarsa, yeniden kümelenmiş dizinseçenektir.YENİDEN çevrimiçi işlem gerçekleştirilebilir.bölümlenmiş tablotek bir bölümü yeniden oluşturmak için bölüm yeniden sözdizimini kullanın.
BÖLÜM = ALL
Tüm bölümlerin bölüm sıkıştırma ayarlarını değiştirirken yeniden oluşturur.YENİDEN ile ( <rebuild_option> )
kümelenmiş diziniçeren bir tablo için tüm seçenekleri uygulanır.tablo kümelenmiş dizinyoksa, yığın yapısı seçeneklerden bazıları yalnızca etkilenir.Yeniden oluşturma seçenekleri tam açıklamaları için bkz: index_option (Transact-SQL).
DATA_COMPRESSION
Belirtilen tablo, bölüm numarası veya aralık bölümleri için veri sıkıştırma seçeneği belirtir.Seçenekler aşağıdaki gibidir:HİÇBİRİ
Tablo veya belirtilen bölümleri sıkıştırılmaz.SATIR
Tablo veya belirtilen bölümleri satır sıkıştırması kullanılarak sıkıştırılır.SAYFA
Tablo veya belirtilen bölümleri sayfa sıkıştırması kullanılarak sıkıştırılır.
Aynı saatbirden çok bölümü yeniden oluşturmak için bkz: index_option (Transact-SQL).tablo kümelenmiş dizinyoksa, veri sıkıştırmayı değiştirme öbek ve kümelenmemiş dizinleri oluşturur.Sıkıştırma hakkında daha fazla bilgi için bkz: Sıkıştırılmış tablolar ve dizinler oluşturma ve UNICODE sıkıştırma genel bakış.
column_set_name XML COLUMN_SET FOR ALL_SPARSE_COLUMNS
sütunkümeadıdır. Bir sütun küme tüm seyrek sütunları bir tablo yapısal çıktı akımına bir araya getiren bir untyped xml temsilidir.Seyrek sütun içeren bir tablo için bir sütunküme eklenemez. sütun kümeleri hakkında daha fazla bilgi için bkz: Sütun kümelerini kullanma.
Açıklamalar
Başvuru tablo, alter table bunları kendi sonraki yürütülmesine çekirdekler için işaretler yürütme planları yordam önbelleği varsa.
Bir sütunun boyutunu değiştirme
alter column yan tümcetümcesindeki sütun veri türü için yeni bir boyut belirterek, uzunluk, duyarlık veya sütun ölçeğini değiştirebilirsiniz.Veri sütunvarsa, yeni boyutu verilerin en büyük boyuttan daha küçük olamaz.' % S'sütun sütun değilse de, sütun bir dizinde tanımlanamaz bir varchar, nvarchar, veya varbinary veri türü dizin ise sonucu değil, bir birincil anahtar kısıtlaması.p. örneğe bakın
Kilitler ve alter table
alter table içinde belirtilen değişiklikler hemen uygulanır.tablosatır değişiklikleri değişiklikler yapılması, alter table satır güncelleştirir.alter table isteklerdir bir şema kilit diğer bağlantılar sonunda çok kısa sch-m kilit gerektiren çevrimiçi dizin işlemleri dışında değişiklik sırasında bile meta veriler tablo için başvuru emin olmak için tablo değiştirin.İçinde bir alter table…GEÇİŞ işlemi, kilit , hem kaynak hem de hedef tablolarda satın alınır.tablo yaptığınız değişiklikler, günlüğe kaydedilen ve tümüyle kurtarılabilir.Tablolardaki sütun bırakarak gibi çok büyük, tüm satırları etkiler veya varsayılan değer, bir not null sütun ekleyerek tamamlamak ve birçok günlük kaydı oluşturmak için uzun saat alabilir değişiklikleri.Bu alter table deyimleri herhangi INSERT, update ile aynı dikkatle yürütülmelidir veya çok sayıda etkiler deyim SİLİN.
Paralel planı yürütme
De SQL Server 2008 Enterprise, işlemci görevli bir tek alter tablo ekleme (dizin tabanlı) çalıştırmak için KISITLAMA veya bırakma (kümelenmiş dizin) sınırlama deyim tarafından belirlenir max degree of parallelism yapılandırma seçeneği ve geçerli bir iş yükü.Veritabanı Altyapısı , Sistemin meşgul, operasyonun paralellik derecesini önce sınırlı otomatik olarak algılar deyim yürütme başlatır.maxdop seçeneği belirterek deyim çalıştırmak için kullanılan işlemci sayısını el ile yapılandırabilirsiniz.
Bölümlenmiş tablolar
Bölümlenmiş tabloları içeren anahtar işlemleri gerçekleştirme yanında alter table sütunlar, kısıtlamaları ve tetikleyiciler yalnızca nonpartitioned tablo için kullanılan gibi bir bölümlenmiş tablo durumunu değiştirmek için kullanılır.Ancak, bu deyim tablo kendisini bölümlenmiş biçimini değiştirmek için kullanılamaz.bölümlenmiş tablobölümlemek için alter bölüm düzeni ve alter bölüm işlevi.Ayrıca, bir sütun bölümlenmiş tabloveri türünü değiştiremezsiniz.
Şemaya bağlı Görünümler tabloları üzerinde kısıtlamalar
alter table deyimleri şemaya bağlı Görünümler tabloları için uygulanacak sınırlamalar tablo basit bir dizin ile değiştirirken uygulanmakta olan kısıtlamalar ile aynıdır.Bir sütun ekleyerek izin verilir.Ancak, kaldırma veya değiştirme herhangi bir şemaya bağlı görünüm bir sütun izin verilmez.alter table deyim alter table başarısız bir şemaya bağlı görünüm içinde kullanılan bir sütun değiştirme gerektiriyorsa ve Veritabanı Altyapısı harekete geçiren bir hata iletisi.Şema bağlama ve dizin oluşturulmuş görünümler hakkında daha fazla bilgi için bkz: CREATE VIEW (Transact-SQL).
Ekleme veya kaldırma Tetikleyiciler temel tablolarda tablolara başvuran bir şemaya bağlı görünümü oluşturarak etkilenmez.
Dizinler ve alter table
Kısıtlamanın atlanmasına kısıtlama bir parçası olarak oluşturulan dizinler bırakılır.create INDEX ile oluşturulan dizinler, drop INDEX ile bırakılan gerekir.alter INDEX deyim kısıtlaması tanımı bir dizin bölümünü yeniden oluşturmak için kullanılabilir; bırakılan ve yeniden alter table ile eklenen kısıtlaması yok.
sütun kaldırmadan önce tüm dizinler ve bir ' % s'sütunu sütun temel alan kısıtlamalar kaldırılmalıdır.
kümelenmiş dizin oluşturulmuş bir kısıtlama silindiğinde, yaprakdüzey kümelenmiş dizin depolanmış veri satırlarını kümelenmemiş tabloiçinde saklanır. kümelenmiş dizin ve taşımak için seçeneği belirterek başka bir dosya grubu veya bölümleme düzeni tek bir işlemle elde edilen tablo taşıma.GİTMEK için seçeneği aşağıdaki kısıtlamaları vardır:
TAŞIMAK için dizin oluşturulmuş görünümler veya kümelenmemiş dizinler için geçerli değil.
bölümleme düzeni veya dosya grubu önceden mevcut olmalıdır.
TAŞIMAK için belirtilmezse, tablo aynı bölümleme düzeni veya dosya grubu kümelenmiş diziniçin tanımlanan bulunur.
Çevrimiçi belirtebilirsiniz kümelenmiş dizindüşürdüğünüzde drop INDEX hareket sorguları blok ve temel veri değişiklikleri yapar böylece seçeneği = ve kümelenmemiş dizinleri ilişkili.
Çevrimiçi on = aşağıdaki kısıtlamaları vardır:
Çevrimiçi = on de devre dışı kümelenmiş dizinler için geçerli değil.Devre dışı bırakılmış dizinler gerekir iptal çevrimiçi kullanarak = off.
Belirli bir saat yalnızca bir dizin silinebilir.
Çevrimiçi = on dizin oluşturulmuş görünümler, kümelenmemiş dizinler veya yerel bir temp tablolarda dizinler için geçerli değil.
kümelenmiş diziniçin varolan bir kümelenmiş dizin boyuta eşit geçici disk alanı gereklidir.Bu ek alanı işlemi tamamlanır tamamlanmaz yayımlanır.
Not
Altında listelenen seçenekler <drop_clustered_constraint_option> tablolarda kümelenmiş dizinler uygulanır ve görünümleri veya kümelenmiş dizinler için uygulanamazkümelenmemiş dizinler.
Şema değişiklikleri çoğaltılıyor
Yayımlanmış tablo üzerinde alter TABLE'ı çalıştırdığınızda, varsayılan olarak, bir SQL Server Yayımcı, değişikliği tüm yayılır SQL Server aboneleri.Bu işlev, bazı kısıtlamaları vardır ve devre dışı bırakılabilir.Daha fazla bilgi için, bkz. Yayını veritabanları üzerinde şeması değişiklikler yapma.
Veri sıkıştırma
Sistem tabloları için sıkıştırma etkin duruma getirilemez.ÇEVRİMİÇİ moda tek olacaktır tablo yeniden oluşturma işlemi bir yığın ise akan.Çok iş parçacıklı bir yığın için çevrimdışı modu kullan işlemi yeniden oluşturun.Veri sıkıştırma hakkında daha fazla bilgi için bkz: Sıkıştırılmış tablolar ve dizinler oluşturma.
Nasıl sıkıştırılma durumunu değiştirme bir tablo, dizin veya bölüm etkileyeceğini değerlendirmek için kullanın sp_estimate_data_compression_savings saklı yordam.
Bölümlenmiş tablolar için aşağıdaki kısıtlamalar geçerlidir:
tablo varsa sıkıştırma tek bir bölümde ayarını değiştiremezsiniz genel dizin.
alter table <tablo> yeniden bölüm...Sözdizimi belirtilen bölüm oluşturur.
alter table <tablo> yeniden birlikte...sözdizimi, tüm bölümlerini yeniden oluşturur.
İzinler
tabloüzerinde alter izni gerektirir.
Bir tablo anahtarı alter deyimher iki tablo alter table izinleri geçerlidir.Geçileceğini herhangi bir veri, hedef tablogüvenliğini devralır.
alter table deyim sütun ortak dil çalışma zamanı (clr) kullanıcı tanımlı tür veya diğer ad veri türü olarak tanımlanır, türüne başvurular izni gereklidir.
Örnekler
A.Yeni bir sütunekleme
Aşağıdaki örnek, null değerlere izin verir ve varsayılan tanımını sağlanan bir değer bir sütun ekler.Yeni sütun, her satır olacaktır 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.sütunbırakma
Aşağıdaki örnek, tablo sütunkaldırmak için değiştirir.
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.Bir sütunveri türünü değiştirme
Aşağıdaki örnek bir tablo sütun değiştirir INT için 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.Bir kısıtlama sütun ekleme
Aşağıdaki örnek ile yeni bir sütun ekler bir UNIQUE kısıtlama.
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.Varolan bir sütundoğrulanmamış bir denetim kısıtlaması ekleme
Aşağıdaki örnek bir kısıtlama tablovarolan bir sütun ekler.' % S'sütun sütun sınırlamayı ihlal eden bir değere sahiptir.Bu nedenle, WITH NOCHECK karşı varolan satırları doğrulanmış kısıtlamayı önlemek ve kısıtlama eklenmesine izin vermek için kullanılır.
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.Varolan bir sütunvarsayılan kısıtlama ekleme
Aşağıdaki örnek, iki sütun bir tablo oluşturur ve ilk sütundeğeri ekler ve diğer sütun boş kalır.A DEFAULT sonra ikinci sütunkısıtlaması eklenir.Varsayılan geçerli olduğunu doğrulamak için başka bir değer ilk sütuneklenir ve tablo sorgulanır.
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.Kısıtlamaları olan birkaç sütun ekleme
Aşağıdaki örnek, yeni bir sütuntanımlı kısıtlamaları olan birkaç sütuna ekler.İlk yeni sütun olan bir IDENTITY özellik.Her satır, tablo kimlik sütunyeni artımlı değerler vardır.
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.Varsayýlan deðerlerde nullable sütun ekleme
Aşağıdaki örnek bir null sütun ekler bir DEFAULT tanımı ve kullanımı WITH VALUES tablovarolan her satırın değerlerini sağlamak için.DEĞERLERİ ile kullanılırsa, her satırın yeni sütunnull değeri vardır.
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
Ö.Devre dışı bırakma ve yeniden devreye bir kısıtlama
Aşağıdaki örnek verileri kabul maaşlarını sınırlayan bir kısıtlaması devre dışı bırakır.NOCHECK CONSTRAINTile kullanılan ALTER TABLE kısıtlamayı devre dışı bırakın ve izin vermek için INSERT, genellikle ihlal kısıtlama.CHECK CONSTRAINTkısıtlamayı yeniden etkinleştirir.
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.Bir kısıtlama siliniyor
Aşağıdaki örnek kaldırır bir UNIQUE bir tablokısıtlaması.
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.Bölüm tabloları arasında geçiş yapma
Aşağıdaki örnek, bölümleme düzenivarsayarak bir bölümlenmiş tablooluşturanmyRangePS1 önceden oluşturulmuş veritabanı. Sonraki, bir olmayan-bölümlenmiş tablo aynı dosya grubu üzerinde bölümlenmiş tablo olarak aynı yapıya sahip oluşturulur PARTITION 2 tablo PartitionTable.Verilerin PARTITION 2 tablo PartitionTable sonra tablogeçti 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.Devre dışı bırakma ve tetikleyici yeniden devreye
Aşağıdaki örnek DISABLE TRIGGER seçeneği ALTER TABLE Tetikleyici devre dışı bırakmak ve izin vermek için INSERT, genellikle ihlal tetikleyici.ENABLE TRIGGERsonra tetikleyici yeniden etkinleştirmek için kullanılır.
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.PRIMARY key kısıtlaması dizin seçenekleri ile oluşturma
PRIMARY key kısıtlaması aşağıdaki örnek oluşturur PK_TransactionHistoryArchive_TransactionID ve seçenekleri ayarlar FILLFACTOR, ONLINE, ve PAD_INDEX.Sonuçta ortaya çıkan kümelenmiş dizin kısıtlaması aynı adı olacaktır.
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
K.Çevrimiçi modda birincil anahtar kısıtlaması bırakma
Aşağıdaki örnek bir birincil anahtar kısıtlaması ile siler ONLINE seçeneğini küme için ON.
USE AdventureWorks2008R2;
GO
ALTER TABLE Production.TransactionHistoryArchive
DROP CONSTRAINT PK_TransactionHistoryArchive_TransactionID
WITH (ONLINE = ON);
GO
OEkleme ve bir yabancı anahtar kısıtlaması bırakma
Aşağıdaki örnek tablooluştururContactBackupve sonra tabloilk ekleyerek değiştirir bir FOREIGN KEY kısıtlama tablobaşvuran Person, daha sonra bırakma tarafından FOREIGN KEY kısıtlama.
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.Bir sütunboyutunu değiştirme
Aşağıdaki örnek artar bir varchar sütun ve duyarlık ve ölçeği bir decimal sütun.Sütun veri içerdiğinden, yalnızca sütun boyutu artırılabilir.Ayrıca dikkat col_a benzersiz dizintanımlı.Boyutunu col_a veri türü olduğundan yine de istikrarlı bir varchar ve dizin değil sonucu bir birincil anahtar kısıtlaması.
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.kilit etkinleşmesini bölümlenmiş tabloları üzerinde izin verme
Aşağıdaki örnek, kilit etkinleşmesini bölümlenmiş tablobölüm düzey sağlar.tablo bölümlenmiş değil, kilit etkinleşmesini tablo düzeydeğildir.
ALTER TABLE T1 SET (LOCK_ESCALATION = AUTO);
GO
RDeğişiklik izleme tabloüzerinde yapılandırma
Aşağıdaki örnek, değişiklik izleme üzerinde etkinleştirir Person.Person tablo AdventureWorks2008R2 veritabanı.
USE AdventureWorks2008R2;
ALTER TABLE Person.Person
ENABLE CHANGE_TRACKING;
Aşağıdaki örnek, değişiklik izlemeyi etkinleştirir ve değişikliği sırasında güncelleştirilmiş sütunları izlenmesini sağlar.
USE AdventureWorks2008R2;
ALTER TABLE Person.Person
ENABLE CHANGE_TRACKING
WITH (TRACK_COLUMNS_UPDATED = ON)
Aşağıdaki örnek, değişiklik üzerinde izleme devre dışı bırakır Person.Person tablo AdventureWorks2008R2 Veritabanı:
USE AdventureWorks2008R2;
ALTER TABLE Person.Person
DISABLE CHANGE_TRACKING;
S.Sıkıştırma değiştirmek için bir tablo değiştirme
Aşağıdaki örnek, nonpartitioned bir tablosıkıştırmasını değiştirir.Yığın veya kümelenmiş dizin Derlenecek.tablo bir yığın ise, tüm kümelenmemiş dizinler yeniden oluşturulur.
ALTER TABLE T1
REBUILD WITH (DATA_COMPRESSION = PAGE);
Aşağıdaki örnek bölümlenmiş tablosıkıştırmasını değiştirir.REBUILD PARTITION = 1 Sözdizimi Bölüm numarası neden olan 1 bunları yeniden.
ALTER TABLE PartitionTable1
REBUILD PARTITION = 1 WITH (DATA_COMPRESSION = NONE) ;
GO
Aynı işlemi diğer sözdizimini kullanarak tüm bölümleri yeniden oluşturulması tablo neden olur.
ALTER TABLE PartitionTable1
REBUILD PARTITION = ALL
WITH (DATA_COMPRESSION = PAGE ON PARTITIONS(1) ) ;
Ek veri sıkıştırma örnekler için bkz: Sıkıştırılmış tablolar ve dizinler oluşturma.
T.Seyrek sütunekleme
Aşağıdaki örnekler, ekleme ve tablo T1 seyrek sütunları değiştirme açıklar.tablooluşturmak için kodT1 olarak aşağıdadır.
CREATE TABLE T1
(C1 int PRIMARY KEY,
C2 varchar(50) SPARSE NULL,
C3 int SPARSE NULL,
C4 int ) ;
GO
Ek seyrek sütuneklemek içinC5, aşağıdaki deyim yürütmek .
ALTER TABLE T1
ADD C5 char(100) SPARSE NULL ;
GO
Dönüştürmek C4 seyrek olmayan sütun seyrek sütun, aşağıdaki deyim yürütmek .
ALTER TABLE T1
ALTER COLUMN C4 ADD SPARSE ;
GO
Dönüştürmek C4 seyrek sütun nonsparse sütun, aşağıdaki deyim yürütmek .
ALTER TABLE T1
ALTER COLUMN C4 DROP SPARSE;
GO
U'YABir sütunkümeekleme
Aşağıdaki örnekler tablobir sütun ekleyerekT2. Seyrek sütun içeren bir tablo için bir sütunküme eklenemez. tablooluşturmak için kodT2 olarak aşağıdadır.
CREATE TABLE T2
(C1 int PRIMARY KEY,
C2 varchar(50) NULL,
C3 int NULL,
C4 int ) ;
GO
Aşağıdaki üç ifade adlı bir sütun küme ekleme CSve sütunları değiştirmek C2 ve C3 için 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.sütunharmanlamadeğiştirme
Aşağıdaki örnek, bir sütun harmanlama gösterilmiştir.Önce biz tablooluşturmakT3 varsayılan kullanıcı alfabe ile:
CREATE TABLE T3
(C1 int PRIMARY KEY,
C2 varchar(50) NULL,
C3 int NULL,
C4 int ) ;
GO
Sonraki, sütun C2 harmanlama değişti yapılan.Değişmemiş halde veri türünün gerekli olduğunu unutmayın.
ALTER TABLE T3
ALTER COLUMN C2 varchar(50) COLLATE Latin1_General_BIN
GO
Ayrıca bkz.