Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Applies to:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Azure Synapse Analytics
Analytics Platform Sistemi (PDW)
Warehouse in Microsoft Fabric
SQL veritabanı Microsoft Fabric
Sütunları ve kısıtlamaları değiştirerek, ekleyerek veya bırakarak tablo tanımını değiştirir.
ALTER TABLE ayrıca bölümleri yeniden atar ve yeniden oluşturur ya da kısıtlamaları ve tetikleyicileri devre dışı bırakır ve etkinleştirir.
Tavsiye
ALTER TABLE söz dizimi, Microsoft SQL Database Engine farklı sürümlerinde farklılık gösterir.
Uygun ürün sürümünü seçmek için sürüm seçici açılan listesini kullanın.
için söz dizimi ALTER TABLE , disk tabanlı tablolar ve bellek için iyileştirilmiş tablolar için farklıdır. Sizi tablo türleriniz için uygun söz dizimi bloğuna ve uygun söz dizimi örneklerine doğrudan götürmek için aşağıdaki bağlantıları kullanın:
Disk tabanlı tablolar:
Bellek için iyileştirilmiş tablolar:
Söz dizimi kuralları hakkında daha fazla bilgi için bkz. Transact-SQL söz dizimi kuralları.
Disk tabanlı tablolar için söz dizimi
ALTER TABLE { database_name.schema_name.table_name | schema_name.table_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 | HIDDEN }
| { ADD | DROP } MASKED [ WITH ( FUNCTION = ' mask_function ') ]
}
[ WITH ( ONLINE = ON | OFF ) ]
| [ WITH { CHECK | NOCHECK } ]
| ADD
{
<column_definition>
| <computed_column_definition>
| <table_constraint>
| <column_set_definition>
} [ ,...n ]
| [ system_start_time_column_name datetime2 GENERATED ALWAYS AS ROW START
[ HIDDEN ] [ NOT NULL ] [ CONSTRAINT constraint_name ]
DEFAULT constant_expression [WITH VALUES] ,
system_end_time_column_name datetime2 GENERATED ALWAYS AS ROW END
[ HIDDEN ] [ NOT NULL ][ CONSTRAINT constraint_name ]
DEFAULT constant_expression [WITH VALUES] ,
start_transaction_id_column_name bigint GENERATED ALWAYS AS TRANSACTION_ID START
[ HIDDEN ] NOT NULL [ CONSTRAINT constraint_name ]
DEFAULT constant_expression [WITH VALUES],
end_transaction_id_column_name bigint GENERATED ALWAYS AS TRANSACTION_ID END
[ HIDDEN ] NULL [ CONSTRAINT constraint_name ]
DEFAULT constant_expression [WITH VALUES],
start_sequence_number_column_name bigint GENERATED ALWAYS AS SEQUENCE_NUMBER START
[ HIDDEN ] NOT NULL [ CONSTRAINT constraint_name ]
DEFAULT constant_expression [WITH VALUES],
end_sequence_number_column_name bigint GENERATED ALWAYS AS SEQUENCE_NUMBER END
[ HIDDEN ] NULL [ CONSTRAINT constraint_name ]
DEFAULT constant_expression [WITH VALUES]
]
PERIOD FOR SYSTEM_TIME ( system_start_time_column_name, system_end_time_column_name )
| DROP
[ {
[ CONSTRAINT ][ IF EXISTS ]
{
constraint_name
[ WITH
( <drop_clustered_constraint_option> [ ,...n ] )
]
} [ ,...n ]
| COLUMN [ IF EXISTS ]
{
column_name
} [ ,...n ]
| PERIOD FOR SYSTEM_TIME
} [ ,...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 ]
[ WITH ( <low_priority_lock_wait> ) ]
| SET
(
[ FILESTREAM_ON =
{ partition_scheme_name | filegroup | "default" | "NULL" } ]
| SYSTEM_VERSIONING =
{
OFF
| ON
[ ( HISTORY_TABLE = schema_name . history_table_name
[, DATA_CONSISTENCY_CHECK = { ON | OFF } ]
[, HISTORY_RETENTION_PERIOD =
{
INFINITE | number {DAY | DAYS | WEEK | WEEKS
| MONTH | MONTHS | YEAR | YEARS }
}
]
)
]
}
| DATA_DELETION =
{
OFF
| ON
[( [ FILTER_COLUMN = column_name ]
[, RETENTION_PERIOD = { INFINITE | number { DAY | DAYS | WEEK | WEEKS
| MONTH | MONTHS | YEAR | YEARS } } ]
)]
} )
| REBUILD
[ [PARTITION = ALL]
[ WITH ( <rebuild_option> [ ,...n ] ) ]
| [ PARTITION = partition_number
[ WITH ( <single_partition_rebuild_option> [ ,...n ] ) ]
]
]
| <table_option>
| <filetable_option>
| <stretch_configuration>
}
[ ; ]
-- ALTER TABLE options
<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 } )
}
<filetable_option> ::=
{
[ { ENABLE | DISABLE } FILETABLE_NAMESPACE ]
[ SET ( FILETABLE_DIRECTORY = directory_name ) ]
}
<stretch_configuration> ::=
{
SET (
REMOTE_DATA_ARCHIVE
{
= ON (<table_stretch_options>)
| = OFF_WITHOUT_DATA_RECOVERY ( MIGRATION_STATE = PAUSED )
| ( <table_stretch_options> [, ...n] )
}
)
}
<table_stretch_options> ::=
{
[ FILTER_PREDICATE = { null | table_predicate_function } , ]
MIGRATION_STATE = { OUTBOUND | INBOUND | PAUSED }
}
<single_partition_rebuild__option> ::=
{
SORT_IN_TEMPDB = { ON | OFF }
| MAXDOP = max_degree_of_parallelism
| DATA_COMPRESSION = { NONE | ROW | PAGE | COLUMNSTORE | COLUMNSTORE_ARCHIVE}
| ONLINE = { ON [( <low_priority_lock_wait> ) ] | OFF }
}
<low_priority_lock_wait>::=
{
WAIT_AT_LOW_PRIORITY ( MAX_DURATION = <time> [ MINUTES ],
ABORT_AFTER_WAIT = { NONE | SELF | BLOCKERS } )
}
Daha fazla bilgi için bkz:
- ALTER TABLE column_constraint (Transact-SQL)
- ALTER TABLE column_definition (Transact-SQL)
- ALTER TABLE computed_column_definition (Transact-SQL)
- ALTER TABLE index_option (Transact-SQL)
- ALTER TABLE table_constraint (Transact-SQL)
Bellek için iyileştirilmiş tablolar için söz dizimi
ALTER TABLE { database_name.schema_name.table_name | schema_name.table_name | table_name }
{
ALTER COLUMN column_name
{
[ type_schema_name. ] type_name
[ (
{
precision [ , scale ]
}
) ]
[ COLLATE collation_name ]
[ NULL | NOT NULL ]
}
| ALTER INDEX index_name
{
[ type_schema_name. ] type_name
REBUILD
[ [ NONCLUSTERED ] WITH ( BUCKET_COUNT = bucket_count )
]
}
| ADD
{
<column_definition>
| <computed_column_definition>
| <table_constraint>
| <table_index>
| <column_index>
} [ ,...n ]
| DROP
[ {
CONSTRAINT [ IF EXISTS ]
{
constraint_name
} [ ,...n ]
| INDEX [ IF EXISTS ]
{
index_name
} [ ,...n ]
| COLUMN [ IF EXISTS ]
{
column_name
} [ ,...n ]
| PERIOD FOR SYSTEM_TIME
} [ ,...n ] ]
| [ WITH { CHECK | NOCHECK } ] { CHECK | NOCHECK } CONSTRAINT
{ ALL | constraint_name [ ,...n ] }
| { ENABLE | DISABLE } TRIGGER
{ ALL | trigger_name [ ,...n ] }
| SWITCH [ [ PARTITION ] source_partition_number_expression ]
TO target_table
[ PARTITION target_partition_number_expression ]
[ WITH ( <low_priority_lock_wait> ) ]
}
[ ; ]
-- ALTER TABLE options
< table_constraint > ::=
[ CONSTRAINT constraint_name ]
{
{PRIMARY KEY | UNIQUE }
{
NONCLUSTERED (column [ ASC | DESC ] [ ,... n ])
| NONCLUSTERED HASH (column [ ,... n ] ) WITH ( BUCKET_COUNT = bucket_count )
}
| FOREIGN KEY
( column [ ,...n ] )
REFERENCES referenced_table_name [ ( ref_column [ ,...n ] ) ]
| CHECK ( logical_expression )
}
<column_index> ::=
INDEX index_name
{ [ NONCLUSTERED ] | [ NONCLUSTERED ] HASH WITH (BUCKET_COUNT = bucket_count) }
<table_index> ::=
INDEX index_name
{ [ NONCLUSTERED ] HASH (column [ ,... n ] ) WITH (BUCKET_COUNT = bucket_count)
| [ NONCLUSTERED ] (column [ ASC | DESC ] [ ,... n ] )
[ ON filegroup_name | default ]
| CLUSTERED COLUMNSTORE [ WITH ( COMPRESSION_DELAY = { 0 | delay [MINUTES] } ) ]
[ ON filegroup_name | default ]
}
Azure Synapse Analytics ve Paralel Data Warehouse söz dizimi
ALTER TABLE { database_name.schema_name.source_table_name | schema_name.source_table_name | source_table_name }
{
ALTER COLUMN column_name
{
type_name [ ( precision [ , scale ] ) ]
[ COLLATE Windows_collation_name ]
[ NULL | NOT NULL ]
}
| ADD { <column_definition> | <column_constraint> FOR column_name} [ ,...n ]
| DROP { COLUMN column_name | [CONSTRAINT] constraint_name } [ ,...n ]
| REBUILD {
[ PARTITION = ALL [ WITH ( <rebuild_option> ) ] ]
| [ PARTITION = partition_number [ WITH ( <single_partition_rebuild_option> ] ]
}
| { SPLIT | MERGE } RANGE (boundary_value)
| SWITCH [ PARTITION source_partition_number
TO target_table_name [ PARTITION target_partition_number ] [ WITH ( TRUNCATE_TARGET = ON | OFF ) ] ]
}
[ ; ]
<column_definition>::=
{
column_name
type_name [ ( precision [ , scale ] ) ]
[ <column_constraint> ]
[ COLLATE Windows_collation_name ]
[ NULL | NOT NULL ]
}
<column_constraint>::=
[ CONSTRAINT constraint_name ]
{
DEFAULT constant_expression
| PRIMARY KEY NONCLUSTERED (column_name [ ,... n ]) NOT ENFORCED -- Applies to Azure Synapse Analytics only
| UNIQUE (column_name [ ,... n ]) NOT ENFORCED -- Applies to Azure Synapse Analytics only
}
<rebuild_option > ::=
{
DATA_COMPRESSION = { COLUMNSTORE | COLUMNSTORE_ARCHIVE }
[ ON PARTITIONS ( {<partition_number> [ TO <partition_number>] } [ , ...n ] ) ]
| XML_COMPRESSION = { ON | OFF }
[ ON PARTITIONS ( {<partition_number> [ TO <partition_number>] } [ , ...n ] ) ]
}
<single_partition_rebuild_option > ::=
{
DATA_COMPRESSION = { COLUMNSTORE | COLUMNSTORE_ARCHIVE }
}
Fabric'da Ambar söz dizimi
ALTER TABLE { database_name.schema_name.table_name | schema_name.table_name | table_name }
{
ADD { column_name <data_type> [COLLATE collation_name] [ <column_options> ] } [ ,...n ]
| ADD { <column_constraint> FOR column_name} [ ,...n ]
| DROP { COLUMN column_name | [CONSTRAINT] constraint_name } [ ,...n ]
}
[ ; ]
<column_options> ::=
[ NULL ] -- default is NULL
<data type> ::= type_name [ ( precision [ , scale ] ) ]
<column_constraint>::=
[ CONSTRAINT constraint_name ]
{
PRIMARY KEY NONCLUSTERED (column_name [ ,... n ]) NOT ENFORCED
| UNIQUE NONCLUSTERED (column_name [ ,... n ]) NOT ENFORCED
| FOREIGN KEY
( column [ ,...n ] )
REFERENCES referenced_table_name [ ( ref_column [ ,...n ] ) ] NOT ENFORCED
}
Arguments
veritabanı_adı
Tabloyu oluşturduğunuz veritabanının adı.
schema_name
Tablonun ait olduğu şemanın adı.
tablo_adı
Değiştirecek tablonun adı. Tablo geçerli veritabanında değilse veya tablo şeması geçerli kullanıcıya ait değilse, veritabanını ve şemayı açıkça belirtmeniz gerekir.
ALTER SÜTUNU
Değiştirecek adlandırılmış sütunu belirtir.
Değiştirilen sütun şu şekilde olamaz:
Veri türü
zaman damgasına sahip bir sütun. ROWGUIDCOLTablo için.Hesaplanan sütun veya hesaplanan sütunda kullanılır.
deyimi tarafından
CREATE STATISTICSoluşturulan istatistiklerde kullanılır. Bu istatistikleri bırakmak için, önceALTER COLUMNkomutunu çalıştırarakDROP STATISTICSbaşarılı olun. Bir tablonun kullanıcı tarafından oluşturulan tüm istatistik ve istatistik sütunlarını almak için bu sorguyu çalıştırın.SELECT s.name AS statistics_name, c.name AS column_name, sc.stats_column_id FROM sys.stats AS s INNER JOIN sys.stats_columns AS sc ON s.object_id = sc.object_id AND s.stats_id = sc.stats_id INNER JOIN sys.columns AS c ON sc.object_id = c.object_id AND c.column_id = sc.column_id WHERE s.object_id = OBJECT_ID('<table_name>');Veya
PRIMARY KEY[FOREIGN KEY] REFERENCESkısıtlamasında kullanılır.Veya
CHECKUNIQUEkısıtlamasında kullanılır. Ancak, veyaUNIQUEkısıtlamasında kullanılanCHECKdeğişken uzunluklu sütunun uzunluğunu değiştirebilirsiniz.Varsayılan bir tanım ile ilişkilendirildi. Ancak, veri türünü değiştirmezseniz sütunun uzunluğunu, duyarlığı veya ölçeğini değiştirebilirsiniz.
ALTER COLUMN sorgu iyileştiricisinin otomatik olarak oluşturduğu istatistikleri bırakır.
Metin, ntext ve görüntü sütunlarının veri türünü yalnızca aşağıdaki yollarla değiştirebilirsiniz:
- varchar(max),
nvarchar(max) veyaxml metin - ntextvarchar(max), nvarchar(max)veya xml
- varbinary(max) için görüntü
Bazı veri türü değişiklikleri verilerde değişikliğe neden olabilir. Örneğin, nchar veya nvarchar sütununu karakter veya varchar olarak değiştirmek, genişletilmiş karakterlerin dönüştürülmesine neden olabilir. Daha fazla bilgi için bkz. CAST ve CONVERT (Transact-SQL).
- Bir sütunun duyarlığını veya ölçeğini azaltmak verilerin kesilmesine neden olabilir.
- Bölümlenmiş tablodaki bir sütunun veri türünü değiştiremezsiniz.
- Sütun bir varchar, nvarchar veya varbinary veri türü değilse ve yeni boyut eski boyuta eşit veya ondan büyük değilse, dizine dahil edilen sütunların veri türünü değiştiremezsiniz.
- Birincil anahtar kısıtlamasına dahil olan bir sütunu olarak
NOT NULLdeğiştiremezsinizNULL.
Always Encrypted kullandığınızda (güvenli kuşatmalar olmadan), ile ENCRYPTED WITHşifrelenmiş bir sütunu değiştirirseniz, veri türünü uyumlu bir veri türüyle (int-bigint gibi) değiştirebilirsiniz, ancak herhangi bir şifreleme ayarlarını değiştiremezsiniz.
Always Encrypted'ı güvenli kuşatmalarla kullandığınızda, sütunu koruyan sütun şifreleme anahtarı (ve anahtarı değiştiriyorsanız yeni sütun şifreleme anahtarı) kapanım hesaplamalarını destekliyorsa (kapanım özellikli sütun master anahtarlarıyla şifrelenir) herhangi bir şifreleme ayarını değiştirebilirsiniz. Ayrıntılar için bkz. Güvenli kuşatmalarla Always Encrypted.
Bir sütunu değiştirdiğinizde, Database Engine sistem tablosuna bir satır ekleyerek ve önceki sütun değişikliğini bırakılan sütun olarak işaretleyerek her değişikliği izler. Bir sütunu çok fazla değiştirdiğiniz nadir durumlarda, Database Engine kayıt boyutu sınırına ulaşabilir. Böyle bir durumda MSSQLSERVER_511 veya 1708 hatası alırsınız. Bu hataları önlemek için, tablodaki kümelenmiş dizini düzenli aralıklarla yeniden oluşturun veya sütun değişikliği sayısını azaltın.
sütun_adı
Değiştirilip eklenecek veya bırakıla sütunun adı. en fazla column_name 128 karakterdir.
Yeni sütunlar için, zaman damgası veri türüyle oluşturulan sütunlar için column_name atlayabilirsiniz.
Note
Tablodaki tüm mevcut sütunlar değiştirildikten sonra yeni sütunlar eklenir.
[ type_schema_name. ] type_name
Değiştirilen sütunun yeni veri türü veya eklenen sütunun veri türü. Bölümlenmiş tabloların mevcut sütunları için type_name belirtemezsiniz. type_name aşağıdaki türlerden herhangi biri olabilir:
- SQL Server sistem veri türü.
- SQL Server sistem veri türünü temel alan diğer ad veri türü. Bir tablo tanımında
CREATE TYPEkullanılmadan önce deyimiyle diğer ad veri türleri oluşturursunuz. - .NET Framework kullanıcı tanımlı türü ve ait olduğu şema. Bir tablo tanımında
CREATE TYPEkullanılmadan önce deyimiyle kullanıcı tanımlı türler oluşturursunuz.
Aşağıdaki ölçütler, değiştirilen bir sütunun type_name için geçerlidir:
- Önceki veri türü, yeni veri türüne örtük olarak dönüştürülebilir olmalıdır.
type_name zaman damgası olamaz. -
ANSI_NULLiçin varsayılan değerler her zaman açıktırALTER COLUMN; belirtilmezse sütun null atanabilir. -
ANSI_PADDINGdoldurma her zamanONiçindirALTER COLUMN. - Değiştirilen sütun bir kimlik sütunuysa, new_data_type kimlik özelliğini destekleyen bir veri türü olmalıdır.
- için
SET ARITHABORTgeçerli ayar yoksayılır.ALTER TABLEolarak ayarlanmışARITHABORTgibiONçalışır.
Note
Yan tümcesini COLLATE belirtmezseniz, bir sütunun veri türünü değiştirmek, veritabanının varsayılan harmanlaması için harmanlama değişikliğine neden olur.
hassasiyet
Belirtilen veri türü için duyarlık. Geçerli duyarlık değerleri hakkında daha fazla bilgi için bkz. Precision, scale ve length (Transact-SQL).
scale
Belirtilen veri türü için ölçek. Geçerli ölçek değerleri hakkında daha fazla bilgi için bkz. Öndirim, ölçek ve uzunluk (Transact-SQL).
max
Yalnızca varchar, nvarcharve 2^31-1 bayt karakter, ikili veri ve Unicode verilerini depolamak için varbinary veri türleri için geçerlidir.
xml_schema_collection
Applies to: SQL Server ve Azure SQL Veritabanı.
Yalnızca xml şemasını türle ilişkilendirmek için xml veri türü için geçerlidir. Şema koleksiyonuna xml sütunu yazmadan önce, önce CREATE XML SCHEMA COLLECTION (Transact-SQL) kullanarak veritabanında şema koleksiyonunu oluşturursunuz.
HARMANLAMA <collation_name>
Değiştirilen sütun için yeni harmanlamayı belirtir. Harmanlama belirtmezseniz, sütuna veritabanının varsayılan harmanlaması atanır. Harmanlama adı Windows harmanlama adı veya SQL harmanlama adı olabilir. Liste ve daha fazla bilgi için bkz. Windows harmanlama adı (Transact-SQL) ve SQL Server Harmanlama Adı (Transact-SQL).
COLLATE yan tümcesi yalnızca char, varchar, nchar ve nvarchar veri türlerinin sütunlarının harmanlamalarını değiştirir. Kullanıcı tanımlı diğer ad veri türü sütununun harmanlamasını değiştirmek için ayrı ALTER TABLE deyimlerini kullanarak sütunu SQL Server sistem veri türüne değiştirin. Ardından harmanlamasını değiştirin ve sütunu bir diğer ad veri türüne geri döndürin.
ALTER COLUMN aşağıdaki koşullardan biri veya daha fazlası mevcutsa harmanlama değişikliği olamaz:
- Kısıtlama
CHECK,FOREIGN KEYkısıtlama veya hesaplanan sütunlar değiştirilen sütuna başvurur. - Sütunda tüm dizinler, istatistikler veya tam metin dizinleri oluşturulur. Sütun harmanlaması değiştirilirse, değiştirilen sütunda otomatik olarak oluşturulan istatistikler bırakılır.
- Şemaya bağlı bir görünüm veya işlev sütuna başvurur.
Desteklenen harmanlamalar hakkında daha fazla bilgi için bkz. COLLATE (Transact-SQL).
NULL | NOT NULL
Sütunun null değerleri kabul edip etmeyeceğini belirtir. Null değerlere izin vermeyen sütunları, yalnızca varsayılan olarak belirtilmişse veya tablo boşsa kullanarak ALTER TABLE ekleyebilirsiniz. Hesaplanan sütunlar için yalnızca öğesini de belirtirseniz belirtebilirsiniz NOT NULLPERSISTED. Yeni sütun null değerlere izin veriyorsa ve varsayılan değer belirtmezseniz, yeni sütun tablodaki her satır için bir null değer içerir. Yeni sütun null değerlere izin veriyorsa ve yeni sütunla varsayılan bir tanım eklerseniz, varsayılan değeri tablodaki mevcut her satır için yeni sütunda depolamak için kullanabilirsiniz WITH VALUES .
Yeni sütun null değerlere izin vermiyorsa ve tablo boş değilse, yeni sütunla bir DEFAULT tanım eklemeniz gerekir. Yeni sütun, mevcut her satırdaki yeni sütunlarda varsayılan değerle otomatik olarak yüklenir.
kısıtlamalarındaki NULL sütunlar dışında, bir ALTER COLUMN sütunu null değerlere izin verecek şekilde zorlamak için öğesini NOT NULL belirtebilirsinizPRIMARY KEY. içinde NOT NULL yalnızca sütun null değer içermiyorsa belirtebilirsinizALTER COLUMN. örneğin, izin verilmeden önce null değerleri bir değerle ALTER COLUMNNOT NULL güncelleştirmeniz gerekir:
UPDATE MyTable SET NullCol = N'some_value' WHERE NullCol IS NULL;
ALTER TABLE MyTable ALTER COLUMN NullCOl NVARCHAR (20) NOT NULL;
veya ALTER TABLE deyimlerini kullanarak CREATE TABLE tablo oluşturduğunuzda veya değiştirdiğinizde, veritabanı ve oturum ayarları sütun tanımında belirttiğiniz veri türünün null atanabilirliğini etkileyebilir ve geçersiz kılabilir. Bir sütunu NULLNOT NULL her zaman veya uyumsuz sütunlar için açıkça tanımlayın.
Kullanıcı tanımlı veri türüne sahip bir sütun eklerseniz, sütunu kullanıcı tanımlı veri türüyle aynı null atanabilirlikle tanımladığınızdan emin olun. Ayrıca, sütun için varsayılan bir değer belirtin. Daha fazla bilgi için bkz. CREATE TABLE (Transact-SQL).
Note
veya NOT NULL ile ALTER COLUMNbelirtirsenizNULL, [(duyarlık [, ölçek ])] new_data_type de belirtmeniz gerekir. Veri türü, duyarlık ve ölçek değişmiyorsa geçerli sütun değerlerini belirtin.
[ {ADD | DÜŞER} ROWGUIDCOL ]
Applies to: SQL Server ve Azure SQL Veritabanı.
Özelliğin belirtilen sütuna ROWGUIDCOL eklendiğini veya bırakıldığını belirtir.
ROWGUIDCOL sütunun bir satır GUID sütunu olduğunu gösterir. Tablo başına sütun olarak yalnızca bir ROWGUIDCOL sütun ayarlayabilirsiniz. Özelliğini yalnızca bir benzersizleştirici sütununa atayabilirsinizROWGUIDCOL. Kullanıcı tanımlı veri türündeki bir sütuna atayamazsınız ROWGUIDCOL .
ROWGUIDCOL sütunda depolanan değerlerin benzersizliğini zorlamaz ve tabloya eklenen yeni satırlar için otomatik olarak değer oluşturmaz. Her sütun için benzersiz değerler oluşturmak için NEWID() deyimlerinde NEWSEQUENTIALID() veya INSERT işlevini kullanın. Ya da sütun için varsayılan olarak NEWID() veya NEWSEQUENTIALID() işlevini belirtin.
[ {ADD | DROP} KALıCı ]
Özelliğin belirtilen sütuna PERSISTED eklendiğini veya bırakıldığını belirtir. Sütun, belirlenici bir ifadeyle tanımlanan hesaplanan bir sütun olmalıdır.
PERSISTED olarak belirtilen sütunlar için, Database Engine hesaplanan değerleri tabloda fiziksel olarak depolar ve hesaplanan sütunun bağlı olduğu diğer sütunlar güncelleştirildiğinde değerleri güncelleştirir. Hesaplanan sütunu olarak PERSISTEDişaretleyerek, belirlenici ancak kesin olmayan ifadelerde tanımlanan hesaplanan sütunlarda dizinler oluşturabilirsiniz. Daha fazla bilgi için bkz. Hesaplanan sütunlardaki dizinler.
SET QUOTED_IDENTIFIER hesaplanan sütunlarda veya dizinlenmiş görünümlerde dizin oluştururken veya değiştirirken olmalıdır ON . Daha fazla bilgi için bkz. SET QUOTED_IDENTIFIER (Transact-SQL).
Bölümlenmiş tablonun bölümleme sütunu olarak kullanılan tüm hesaplanan sütunlar açıkça işaretlenmelidir PERSISTED.
Note
Fabric SQL veritabanında hesaplanan sütunlara izin verilir, ancak şu anda onelake Fabric yansıtılamaz.
ÇOĞALTMA IÇIN BıRAKMA
Applies to: SQL Server ve Azure SQL Veritabanı.
Çoğaltma aracıları ekleme işlemleri gerçekleştirdiğinde kimlik sütunlarında değerlerin artırıldığını belirtir. Bu yan tümceyi yalnızca column_name bir kimlik sütunuysa belirtebilirsiniz.
SPARSE
Sütunun seyrek bir sütun olduğunu gösterir. Seyrek sütunların depolanması null değerler için iyileştirilmiştir. Seyrek sütunları olarak NOT NULLayarlayamazsınız. Bir sütunu seyrekten seyrek olmayana veya seyrek olmayandan seyrek olarak dönüştürdüğünüzde, bu seçenek tabloyu komut yürütme süresi boyunca kilitler. Herhangi bir alan tasarrufunu geri kazanmak için yan tümcesini REBUILD kullanmanız gerekebilir. Seyrek sütunlar hakkında ek kısıtlamalar ve daha fazla bilgi için bkz. Seyrek sütunları kullanma.
ŞUNUNLA MASKELENDİ EKLE ( İŞLEV = 'mask_function')
Applies to: SQL Server 2016 (13.x) ve sonraki sürümleri ve Azure SQL Veritabanı.
Dinamik bir veri maskesi belirtir. mask_function, uygun parametrelerle maskeleme işlevinin adıdır. Üç işlev kullanılabilir:
- default()
- email()
- partial()
- random()
İzin gerektirir ALTER ANY MASK .
Maskeyi bırakmak için DROP MASKEDkullanın. İşlev parametreleri için bkz . Dinamik veri maskeleme.
İzin gerektiren ALTER ANY MASK bir maske ekleyin ve bırakın.
WITH ( ONLINE = ON | KAPALI) <bir sütun> değiştirme için geçerlidir
Applies to: SQL Server 2016 (13.x) ve sonraki sürümleri ve Azure SQL Veritabanı.
Tablo kullanılabilir durumdayken birçok değişiklik sütunu eyleminin gerçekleştirilmesini sağlar. Varsayılan değer OFF. Veri türü, sütun uzunluğu veya duyarlık, null atanabilirlik, seyreklik ve harmanlama ile ilgili sütun değişiklikleri için alter sütununu çevrimiçi olarak çalıştırabilirsiniz.
Çevrimiçi ALTER COLUMN , kullanıcı tarafından oluşturulan ve otomatik durumbilimlerin işlem süresi boyunca değiştirilen sütuna başvurmasına olanak tanır ve bu da sorguların ALTER COLUMN her zamanki gibi çalışmasına olanak tanır. İşlemin sonunda sütuna başvuran otomatik istatistikler bırakılır ve kullanıcı tarafından oluşturulan istatistikler geçersiz kılınmış olur. Kullanıcı, işlem tamamlandıktan sonra kullanıcı tarafından oluşturulan istatistikleri el ile güncelleştirmelidir. Sütun, herhangi bir istatistik veya dizin için bir filtre ifadesinin parçasıysa, işlem ALTER COLUMN gerçekleştiremezsiniz.
Çevrimiçi
ALTER COLUMNişlem çalışırken, bu sütuna bağlı olabilecek tüm DDL işlemleri (dizinleri veya görünümleri oluşturma veya değiştirme gibi) engellenir veya uygun bir hatayla başarısız olur. Bu davranış, işlem çalışırken sunulan bağımlılıklar nedeniyle çevrimiçininALTER COLUMNbaşarısız olmayacağı garanti eder.Bir sütunun
NOT NULLolarak değiştirilmesi, değiştirilen sütunaNULLkümelenmemiş dizinler tarafından başvurulduğunda çevrimiçi bir işlem olarak desteklenmez.Bir denetim kısıtlaması tarafından sütuna başvurulduğunda ve işlem sütunun
ALTERduyarlığı (ALTERveya tarih saat) kısıtlandığında çevrimiçi desteklenmez.seçeneği
WAIT_AT_LOW_PRIORITYçevrimiçiALTER COLUMNile kullanılamaz.ALTER COLUMN ... ADD/DROP PERSISTEDçevrimiçiALTER COLUMNiçin desteklenmez.ALTER COLUMN ... ADD/DROP ROWGUIDCOL/NOT FOR REPLICATIONçevrimiçiALTER COLUMNdurumdan etkilenmez.Çevrimiçi
ALTER COLUMN, değişiklik izlemenin etkinleştirildiği veya birleştirme çoğaltmasının yayımcısı olan bir tablonun değiştirilmesini desteklemez.Çevrimiçi
ALTER COLUMN, clr veri türlerinden veya clr veri türlerine değiştirmeyi desteklemez.Çevrimiçi
ALTER COLUMN, geçerli şema koleksiyonundan farklı bir şema koleksiyonuna sahip bir XML veri türünde değiştirmeyi desteklemez.Çevrimiçi
ALTER COLUMN, bir sütunun ne zaman değiştirilebileceğiyle ilgili kısıtlamaları azaltmaz. Dizine, istatistiklere vb. göre başvurular, değişikliğin başarısız olmasına neden olabilir.Çevrimiçi
ALTER COLUMN, birden fazla sütunun eşzamanlı olarak değiştirilmesini desteklemez.Çevrimiçi
ALTER COLUMNsürümlü bir zamana bağlı tabloda hiçbir etkisi yoktur.ALTERsütunu, seçenek içinONLINEhangi değerin belirtildiğinden bağımsız olarak çevrimiçi olarak çalıştırılamaz.
Çevrimiçi ALTER COLUMN , aşağıdakiler dahil çevrimiçi dizin yeniden derlemesi ile benzer gereksinimlere, kısıtlamalara ve işlevlere sahiptir:
- Tablo eski LOB veya dosya akışı sütunları içerdiğinde veya tabloda columnstore dizini olduğunda çevrimiçi dizin yeniden oluşturma desteklenmez. Aynı sınırlamalar çevrimiçi
ALTER COLUMNiçin de geçerlidir. - Değiştirilmekte olan mevcut bir sütun, özgün sütun ve yeni oluşturulan gizli sütun için iki kat alan ayırma gerektirir.
- Bir değişiklik sütunu çevrimiçi işlemi sırasındaki kilitleme stratejisi, çevrimiçi dizin derlemesi için kullanılan aynı kilitleme desenini izler.
CHECK ILE | NOCHECK ILE
Tablodaki verilerin yeni eklenen veya yeniden etkinleştirilen FOREIGN KEYCHECK ya da kısıtlamaya göre doğrulanıp doğrulanmayacağını belirtir. Belirtmezseniz, WITH CHECK yeni kısıtlamalar için kabul edilir ve WITH NOCHECK yeniden etkinleştirilen kısıtlamalar için varsayılır.
Yeni CHECK verileri veya FOREIGN KEY mevcut verilerle ilgili kısıtlamaları doğrulamak istemiyorsanız kullanın WITH NOCHECK. Bu genellikle önerilmez, ancak bazı durumlarda gerekli olabilir. Yeni kısıtlama sonraki tüm veri güncelleştirmelerinde değerlendirilir. Kısıtlama eklendiğinde tarafından WITH NOCHECK gizlenen kısıtlama ihlalleri, satırları kısıtlamaya uymayan verilerle güncelleştirdiklerinde gelecekteki güncelleştirmelerin başarısız olmasına neden olabilir. Sorgu iyileştiricisi tanımlanan WITH NOCHECKkısıtlamaları dikkate almaz. Bu tür kısıtlamalar ALTER TABLE table WITH CHECK CHECK CONSTRAINT ALLkullanılarak yeniden etkinleştirilene kadar yoksayılır. Daha fazla bilgi için bkz. INSERT ve UPDATE deyimleriyle yabancı anahtar kısıtlamalarını devre dışı bırakma.
ALTER INDEX index_name
index_name için demet sayısının değiştirileceği veya değiştirileceği belirtir.
Söz dizimi ALTER TABLE ... ADD/DROP/ALTER INDEX yalnızca bellek için iyileştirilmiş tablolar için desteklenir.
Important
ALTER TABLE deyimi kullanmadan deyimleri CREATE INDEX (Transact-SQL), DROP INDEX (Transact-SQL), ALTER INDEX (Transact-SQL) ve ALTER TABLE index_option (Transact-SQL) dizinler için desteklenmez bellek için iyileştirilmiş tablolar.
ADD
Bir veya daha fazla sütun tanımının, hesaplanan sütun tanımının veya tablo kısıtlamasının eklendiğini belirtir. Ya da sistemin sistem sürümü oluşturma için kullandığı sütunlar eklenir. Bellek için iyileştirilmiş tablolar için dizin ekleyebilirsiniz.
Note
Tablodaki tüm mevcut sütunlar değiştirildikten sonra yeni sütunlar eklenir.
Important
ALTER TABLE deyimi kullanmadan deyimleri CREATE INDEX (Transact-SQL), DROP INDEX (Transact-SQL), ALTER INDEX (Transact-SQL) ve ALTER TABLE index_option (Transact-SQL) dizinler için desteklenmez bellek için iyileştirilmiş tablolar.
SYSTEM_TIME DÖNEMİ ( system_start_time_column_name, system_end_time_column_name )
Applies to: SQL Server 2017 (14.x) ve sonraki sürümleri ve Azure SQL Veritabanı.
Sistemin bir kaydın geçerli olduğu süreyi kaydetmek için kullandığı sütunların adlarını belirtir. Var olan sütunları belirtebilir veya bağımsız değişkenin ADD PERIOD FOR SYSTEM_TIME bir parçası olarak yeni sütunlar oluşturabilirsiniz.
Sütunları datetime2 veri türüyle ayarlayın ve olarak NOT NULLtanımlayın. Nokta sütununu olarak NULLtanımlarsanız, hata sonucu verir.
bir column_constraint tanımlayabilir ve/veya system_start_time ve system_end_time sütunları için sütunlar için varsayılan değerleri belirtebilirsiniz. Aşağıdaki Sistem Sürümü Oluşturma örneklerinde system_end_time sütunu için varsayılan değerin kullanılmasını gösteren Örnek A'ya bakın.
Var olan bir tabloyu zamansal tablo yapmak için bu bağımsız değişkeni bağımsız değişkenle SET SYSTEM_VERSIONING birlikte kullanın. Daha fazla bilgi için bkz . Geçici tablolar ve Geçici tabloları kullanmaya başlama.
SQL Server 2017 (14.x) itibarıyla kullanıcılar, SELECT * FROM <table_name> sütunların değerini döndürmemesi için bu sütunları örtük olarak gizlemek için HIDDEN bayrağıyla bir veya iki nokta sütununu işaretleyebilir. Varsayılan olarak nokta sütunları gizli değildir. Kullanılabilmesi için, gizli sütunların doğrudan zamana bağlı tabloya başvuran tüm sorgulara açıkça dahil edilmesi gerekir.
DROP
Bir veya daha fazla sütun tanımının, hesaplanan sütun tanımlarının veya tablo kısıtlamalarının bırakıldığını veya sistemin sistem sürümü oluşturma için kullandığı sütunların belirtimini bırakıldığını belirtir.
Note
Kayıt defteri tablolarında bırakılan sütunlar yalnızca geçici olarak silinir. Bırakılan sütun kayıt defteri tablosunda kalır, ancak içindeki sütunu olarak ayarlanarak dropped_ledger_table bırakılan sütun sys.tables1olarak işaretlenir. Bırakılan kayıt defteri tablosunun genel muhasebe görünümü, dropped_ledger_view'daki sys.tables sütunu 1olarak ayarlanarak bırakıldı olarak da işaretlenir. Bırakılan bir kayıt defteri tablosu, geçmiş tablosu ve kayıt defteri görünümü bir ön ek eklenerek (MSSQL_DroppedLedgerTable, MSSQL_DroppedLedgerHistory, MSSQL_DroppedLedgerView) ve özgün ada guid eklenerek yeniden adlandırılır.
KISITLAMA constraint_name
constraint_name tablodan kaldırıldığını belirtir. Birden çok kısıtlama listelenebilir.
sys.check_constraint, sys.default_constraints, sys.key_constraintsve sys.foreign_keys katalog görünümlerini sorgulayarak kısıtlamanın kullanıcı tanımlı veya sistem tarafından sağlanan adını belirleyebilirsiniz.
PRIMARY KEY Tabloda bir XML dizini varsa kısıtlama bırakılamaz.
İNDİS index_name
index_name tablodan kaldırıldığını belirtir.
...ALTER TABLEADD/DROP/söz dizimi ALTER INDEX yalnızca bellek için iyileştirilmiş tablolar için desteklenir.
Important
ALTER TABLE deyimi kullanmadan deyimleri CREATE INDEX (Transact-SQL), DROP INDEX (Transact-SQL), ALTER INDEX (Transact-SQL) ve ALTER TABLE index_option (Transact-SQL) dizinler için desteklenmez bellek için iyileştirilmiş tablolar.
SÜTUN column_name
constraint_name veya column_name tablodan kaldırıldığını belirtir. Birden çok sütun listelenebilir.
Sütun şu durumlarda bırakılamaz:
- Anahtar sütun olarak veya bir dizinde kullanılır
INCLUDE - ,
CHECKFOREIGN KEY,UNIQUEveyaPRIMARY KEYkısıtlamasında kullanılır. - anahtar sözcüğüyle tanımlanan veya varsayılan nesneye
DEFAULTbağlı bir varsayılan değerle ilişkilendirildi. - Bir kurala bağlı.
Note
Sütunun düşmesi sütunun disk alanını geri kazanmaz. Bir tablonun satır boyutu sınırına yaklaştığında veya aşıldığında bırakılan sütunun disk alanını geri kazanmanız gerekebilir. Tabloda kümelenmiş dizin oluşturarak veya ALTER INDEX (Transact-SQL) kullanarak mevcut kümelenmiş dizini yeniden oluşturarak alanı geri kazanabilirsiniz. LOB veri türlerini bırakmanın etkisi hakkında bilgi için bu CSS blog girdisinebakın.
SYSTEM_TIME DÖNEMİ
Applies to: SQL Server 2016 (13.x) ve sonraki sürümleri ve Azure SQL Veritabanı.
Sistemin sistem sürümü oluşturma için kullandığı sütunların belirtimini bırakır.
ILE <drop_clustered_constraint_option>
Bir veya daha fazla bırakma kümelenmiş kısıtlama seçeneğinin ayarlandığını belirtir.
MAXDOP = max_degree_of_parallelism
Applies to: SQL Server ve Azure SQL Veritabanı.
maksimum paralellik derecesi yapılandırma seçeneğini yalnızca işlem süresi boyunca geçersiz kılar. Daha fazla bilgi için bkz . Sunucu yapılandırması: maksimum paralellik derecesi.
MAXDOP Paralel plan yürütmede kullanılan işlemci sayısını sınırlamak için seçeneğini kullanın. Maksimum değer 64 işlemcidir.
max_degree_of_parallelism aşağıdaki değerlerden biri olabilir:
1Paralel plan oluşturmayı bastırır.
>1Paralel dizin işleminde kullanılan en fazla işlemci sayısını belirtilen sayıyla kısıtlar.
0(varsayılan)Geçerli sistem iş yüküne göre gerçek işlemci sayısını veya daha azını kullanır.
Daha fazla bilgi için bkz . Paralel dizin işlemlerini yapılandırma.
Note
Paralel dizin işlemleri SQL Server her sürümünde kullanılamaz. Daha fazla bilgi için bkz. Editions ve desteklenen SQL Server 2022 özellikleri.
ÇEVRİmİÇİ = { ON | OFF } <drop_clustered_constraint_option> için geçerlidir
Dizin işlemi sırasında sorgular ve veri değişikliği için temel tabloların ve ilişkili dizinlerin kullanılabilir olup olmadığını belirtir. Varsayılan değer: OFF. İşlem olarak REBUILD çalıştırabilirsinizONLINE.
ON
Uzun süreli tablo kilitleri dizin işlemi boyunca tutulmaz. Dizin işleminin ana aşamasında, kaynak tabloda yalnızca bir Amaç Paylaşımı (
IS) kilidi tutulur. Bu davranış, temel alınan tablo ve dizinlerde sorguların veya güncelleştirmelerin devam etmelerini sağlar. İşlemin başlangıcında, kaynak nesnede kısa bir süre için Paylaşılan (S) kilidi tutulur. İşlemin sonunda, kümelenmemiş bir dizin oluşturulursa kaynakta kısa bir süre için bir S (Paylaşılan) kilidi alınır. Öte yandan, kümelenmiş dizin çevrimiçi oluşturulduğunda veya bırakıldığında ve kümelenmiş veya kümelenmemiş bir dizin yeniden oluşturulduğunda bir Sch-M (Şema Değişikliği) kilidi alınır.ONLINEyerel geçici tabloda bir dizin oluşturulurken olarak ayarlanamazON. Yalnızca tek iş parçacıklı yığın yeniden derleme işlemine izin verilir.DDL'yi veya çevrimiçi dizin yeniden derlemesini çalıştırmak için
SWITCH, belirli bir tabloda çalışan tüm etkin engelleme işlemlerinin tamamlanması gerekir. YürütülürkenSWITCHveya yeniden oluşturma işlemi yeni işlemlerin başlatılmasını engeller ve iş yükü aktarım hızını önemli ölçüde etkileyebilir ve temel tabloya erişimi geçici olarak geciktirebilir.OFF
Tablo kilitleri dizin işleminin süresi için geçerlidir. Kümelenmiş dizini oluşturan, yeniden derleyen veya düşüren ya da kümelenmemiş bir dizini yeniden oluşturan veya düşüren, tabloda şema değişikliği (Sch-M) kilidi alan çevrimdışı dizin işlemi. Bu kilit, işlem süresi boyunca temel alınan tabloya tüm kullanıcı erişimini engeller. Kümelenmemiş dizin oluşturan çevrimdışı dizin işlemi, tabloda Paylaşılan (S) kilidi alır. Bu kilit, temel tablo güncelleştirmelerini engeller, ancak deyimler gibi
SELECTokuma işlemlerine izin verir. Çok iş parçacıklı yığın yeniden derleme işlemlerine izin verilir.Daha fazla bilgi için bkz. Çevrimiçi dizin işlemleri nasıl çalışır?
Note
Çevrimiçi dizin işlemleri SQL Server her sürümünde kullanılamaz. Daha fazla bilgi için bkz. Editions ve desteklenen SQL Server 2022 özellikleri.
{ partition_scheme_name(column_name [ ,...n ] ) | dosya grubu | "default" }
Applies to: SQL Server ve Azure SQL Veritabanı.
Veri satırlarını kümelenmiş dizinin yaprak düzeyinde taşımak için bir konum belirtir. Tablo yeni konuma taşınır. Bu seçenek yalnızca kümelenmiş dizin oluşturan kısıtlamalar için geçerlidir.
Note
Bu bağlamda anahtar default sözcük değildir. Varsayılan dosya grubu için bir tanımlayıcıdır ve veya MOVE TO "default"içinde MOVE TO [default] olduğu gibi sınırlandırılmalıdır. belirtilirse "default" , QUOTED_IDENTIFIER seçeneği geçerli oturum için olmalıdır ON . Bu varsayılan ayardır. Daha fazla bilgi için bkz. SET QUOTED_IDENTIFIER (Transact-SQL).
{ CHECK | NOCHECK } KıSıTLAMASı
constraint_name etkinleştirildiğini veya devre dışı bırakıldığını belirtir. Bu seçenek yalnızca ve FOREIGN KEY kısıtlamalarıyla CHECK kullanılabilir. Belirtildiğinde NOCHECK kısıtlama devre dışı bırakılır ve sütuna gelecek eklemeler veya güncelleştirmeler kısıtlama koşullarına göre doğrulanmaz.
DEFAULT, PRIMARY KEYve UNIQUE kısıtlamaları devre dışı bırakılamaz.
ALL
Tüm kısıtlamaların seçeneğiyle
NOCHECKdevre dışı bırakıldığını veya seçeneğiyleCHECKetkinleştirildiğini belirtir.
{ ETKİnLEŞTİr | DISABLE } TETIKLEYICISI
trigger_name etkinleştirildiğini veya devre dışı bırakıldığını belirtir. Tetikleyici devre dışı bırakıldığında, tablo için tanımlanmaya devam eder. Ancak, , INSERTveya UPDATE deyimleri tabloda çalıştırıldığında DELETEtetikleyicideki eylemler tetikleyici yeniden etkinleştirilene kadar gerçekleştirilemez.
ALL
Tablodaki tüm tetikleyicilerin etkinleştirildiğini veya devre dışı bırakıldığını belirtir.
trigger_name
Devre dışı bırakacak veya etkinleştirecek tetikleyicinin adını belirtir.
{ ETKİnLEŞTİr | DISABLE } CHANGE_TRACKING
Applies to: SQL Server ve Azure SQL Veritabanı.
Değişiklik izlemenin tablo için devre dışı bırakılıp etkinleştirilmediğini belirtir. Varsayılan olarak, değişiklik izleme devre dışıdır.
Bu seçenek yalnızca veritabanı için değişiklik izleme 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 tablonun birincil anahtarı olmalıdır.
ILE ( TRACK_COLUMNS_UPDATED = { ÜZERINDE | KAPALI } )
Applies to: SQL Server ve Azure SQL Veritabanı.
İzlenen sütunların güncelleştirildiği Database Engine izlenip güncelleştirilmediğini belirtir. Varsayılan değer OFF.
[ BÖLÜM source_partition_number_expression ] ÖĞESINI [ schema_nameOLARAK DEĞIŞTIRIN. ] target_table [ BÖLÜM target_partition_number_expression ]
Applies to: SQL Server ve Azure SQL Veritabanı.
Veri bloğunu aşağıdaki yollardan biriyle değiştirir:
- Bir tablonun tüm verilerini bölüm olarak zaten var olan bir bölümlenmiş tabloya yeniden atayın.
- Bölümlenmiş bir tablodan diğerine bölüm değiştirir.
- Bölümlenmiş tablonun bir bölümündeki tüm verileri mevcut bölümlenmemiş bir tabloya yeniden atayın.
tablo bölümlenmiş bir tabloysa, source_partition_number_expressionbelirtmeniz gerekir. target_table bölümlenmişse, target_partition_number_expressionbelirtmeniz gerekir. Bir tablonun verilerini zaten var olan bir bölümlenmiş tabloya bölüm olarak yeniden atadığınızda veya bölümlenmiş bir tablodan diğerine geçtiğinde, hedef bölüm mevcut olmalı ve boş olmalıdır.
Tek bir tablo oluşturmak için bir bölümün verilerini yeniden atadığınızda, hedef tablo zaten mevcut olmalı ve boş olmalıdır. Hem kaynak tablo ya da bölüm hem de hedef tablo veya bölüm aynı dosya grubunda bulunmalıdır. Karşılık gelen dizinler veya dizin bölümleri de aynı dosya grubunda bulunmalıdır. Bölümler arasında geçiş yapmak için birçok ek kısıtlama geçerlidir. tablo ve target_table aynı olamaz. target_table çok parçalı bir tanımlayıcı olabilir.
Hem source_partition_number_expression hem de target_partition_number_expression değişkenlere ve işlevlere başvurabilen sabit ifadelerdir. Bunlar kullanıcı tanımlı tür değişkenlerini ve kullanıcı tanımlı işlevleri içerir. Transact-SQL ifadelere başvuramaz.
Kümelenmiş columnstore dizini olan bölümlenmiş tablo, bölümlenmiş yığın gibi davranır:
- Birincil anahtar bölüm anahtarını içermelidir.
- Benzersiz bir dizin bölüm anahtarını içermelidir. Ancak, mevcut bir benzersiz dizine sahip bölüm anahtarı dahil olmak benzersizliği değiştirebilir.
- Bölümleri değiştirmek için, tüm kümelenmemiş dizinlerin bölüm anahtarını içermesi gerekir.
Çoğaltma kullanırken kısıtlama için SWITCH bkz . Bölümlenmiş Tabloları ve Dizinleri Çoğaltma.
Kümelenmemiş columnstore dizinleri, SQL Server 2016 (13.x) öncesi salt okunur bir biçimde ve V12 sürümünden önceki SQL Veritabanı için oluşturulmuş. Herhangi bir PARTITION işlemin çalıştırılabilmesi için önce derlenmemiş columnstore dizinlerini geçerli biçime (güncelleştirilebilir) yeniden oluşturmanız gerekir.
Limitations
Her iki tablo da kümelenmemiş dizinler de dahil olmak üzere aynı şekilde bölümlenmişse ve hedef tabloda kümelenmemiş dizin yoksa , 4907 Hatası alabilirsiniz.
Örnek çıkış:
Msg 4907, Level 16, State 1, Line 38
'ALTER TABLE SWITCH' statement failed. The table 'MyDB.dbo.PrtTable1' has 4 partitions while index 'MS1' has 6 partitions.
SET ( FILESTREAM_ON = { partition_scheme_name | filestream_filegroup_name | "varsayılan" | "NULL" })
Applies to: SQL Server. Azure SQL Veritabanı FILESTREAM desteklemez.
FILESTREAM verilerinin depolandığı yeri belirtir.
ALTER TABLE
SET FILESTREAM_ON ile yan tümcesi yalnızca tabloda FILESTREAM sütunu yoksa başarılı olur. İkinci ALTER TABLE bir deyim kullanarak FILESTREAM sütunları ekleyebilirsiniz.
partition_scheme_name belirtirseniz, CREATE TABLE (Transact-SQL) kuralları uygulanır. Tablonun satır verileri için zaten bölümlenmiş olduğundan ve bölüm düzeninin FILESTREAM bölüm düzeniyle aynı bölüm işlevini ve sütunlarını kullandığından emin olun.
filestream_filegroup_name fileSTREAM dosya grubunun adını belirtir. Dosya grubu, CREATE DATABASE veya ALTER DATABASE (Transact-SQL) deyimi kullanılarak dosya grubu için tanımlanmış bir dosyaya sahip olmalıdır; aksi durumda bir hata alırsınız.
"default" , özellik kümesine sahip DEFAULT FILESTREAM dosya grubunu belirtir. FILESTREAM dosya grubu yoksa bir hata alırsınız.
"NULL" tablo için FILESTREAM dosya gruplarına yapılan tüm başvuruların kaldırıldığını belirtir. Önce tüm FILESTREAM sütunları bırakılmalıdır. Tabloyla ilişkili tüm FILESTREAM verilerini silmek için kullanın SET FILESTREAM_ON = "NULL" .
SET ( SYSTEM_VERSIONING = { KAPALI | ON [ ( HISTORY_TABLE = schema_name . history_table_name [ , DATA_CONSISTENCY_CHECK = { ON | OFF } ] ) ] } )
Applies to: SQL Server 2016 (13.x) ve sonraki sürümleri ve Azure SQL Veritabanı.
Tablonun sistem sürümü oluşturmayı devre dışı bırakır veya etkinleştirir. Bir tablonun sistem sürümü oluşturmayı etkinleştirmek için sistem, sistem sürümü oluşturma için veri türü, null atanabilirlik kısıtlaması ve birincil anahtar kısıtlaması gereksinimlerinin karşılandığını doğrular. Sistem, sistem sürümüne sahip tablodaki her kaydın geçmişini ayrı bir geçmiş tablosuna kaydeder.
HISTORY_TABLE Bağımsız değişken kullanılmıyorsa, bu geçmiş tablosunun adı olurMSSQL_TemporalHistoryFor<primary_table_object_id>. Geçmiş tablosu yoksa, sistem geçerli tablonun şemasıyla eşleşen yeni bir geçmiş tablosu oluşturur, iki tablo arasında bir bağlantı oluşturur ve sistemin geçmiş tablosundaki geçerli tablodaki her kaydın geçmişini kaydetmesini sağlar. HISTORY_TABLE bağımsız değişkenini kullanarak bir bağlantı oluşturur ve var olan bir geçmiş tablosunu kullanırsanız, sistem geçerli tabloyla belirtilen tablo arasında bir bağlantı oluşturur. Var olan bir geçmiş tablosuna bağlantı oluştururken veri tutarlılığı denetimi yapmayı seçebilirsiniz. Bu veri tutarlılığı denetimi, mevcut kayıtların çakışmamasını sağlar. Veri tutarlılığı denetimini çalıştırmak varsayılandır. Var olan tabloyu geçici bir tablo yapmak için SYSTEM_VERSIONING = ON yan tümcesiyle tanımlanan bir tablodaki PERIOD FOR SYSTEM_TIME bağımsız değişkenini kullanın. Daha fazla bilgi için bkz. Zamana bağlı tablolar.
HISTORY_RETENTION_PERIOD = { SONSUZ | sayı { GÜN | GÜN | HAFTA | HAFTALAR | AY | AYLAR | YIL | YIL } }
Applies to: SQL Server 2017 (14.x) ve Azure SQL Veritabanı.
Zamana bağlı bir tablodaki geçmiş veriler için sonlu veya sonsuz saklamayı belirtir. Atlanırsa, sonsuz saklama varsayılır.
DATA_DELETION
Applies to: Uç Cihazlar için Azure SQL only
Bir veritabanı içindeki tablolardan eski veya eski verilerin saklama ilkesi tabanlı temizlenmesini sağlar. Daha fazla bilgi için bkz. Veri Saklamayı Etkinleştirme ve Devre Dışı Bırakma. Veri saklamanın etkinleştirilmesi için aşağıdaki parametreler belirtilmelidir.
FILTER_COLUMN = { column_name }
Tablodaki satırların eski olup olmadığını belirlemek için kullanılacak sütunu belirtir. Filtre sütunu için aşağıdaki veri türlerine izin verilir.
- date
- datetime
- datetime2
- smalldatetime
- datetimeoffset
RETENTION_PERIOD = { SONSUZ | sayı { GÜN | GÜN | HAFTA | HAFTALAR | AY | AYLAR | YIL | YIL } }
Tablo için bekletme süresi ilkesini belirtir. Bekletme süresi, pozitif bir tamsayı değeri ile tarih bölümü biriminin birleşimi olarak belirtilir.
SET ( LOCK_ESCALATION = { AUTO | TABLO | DISABLE } )
Applies to: SQL Server ve Azure SQL Veritabanı.
Bir tablo için izin verilen kilit yükseltme yöntemlerini belirtir.
AUTO
Bu seçenek, SQL Server Database Engine tablo şemasına uygun kilit yükseltme ayrıntı düzeyini seçmesine olanak tanır.
Tablo bölümlenmişse, yığına veya B ağacı (HoBT) ayrıntı düzeyine kilit yükseltmesine izin verilir. Başka bir deyişle, bölüm düzeyine yükseltmeye izin verilir. Kilit HoBT düzeyine yükseltildikten sonra, kilit daha sonra ayrıntı düzeyine
TABLEyükseltilmeyecektir.Tablo bölümlenmemişse, kilit yükseltmesi ayrıntı düzeyine
TABLEyapılır.
TABLE
Kilit yükseltmesi, tablo bölümlenmiş veya bölümlenmemiş olsun tablo düzeyinde ayrıntı düzeyinde yapılır.
TABLEvarsayılan değerdir.DISABLE
Çoğu durumda kilit yükseltmesini önler. Tablo düzeyinde kilitlere tamamen izin verilmez. Örneğin, serileştirilebilir yalıtım düzeyi altında kümelenmiş dizini olmayan bir tabloyu tararken, Database Engine veri bütünlüğünü korumak için bir tablo kilidi almanız gerekir.
REBUILD
Bölümlenmiş tablodaki REBUILD WITH tüm bölümler dahil olmak üzere bir tablonun tamamını yeniden oluşturmak için söz dizimini kullanın. Tabloda kümelenmiş dizin varsa, REBUILD seçeneği kümelenmiş dizini yeniden oluşturur.
REBUILD bir ONLINE işlem olarak çalıştırılabilir.
Bölümlenmiş tablodaki REBUILD PARTITION tek bir bölümü yeniden oluşturmak için söz dizimini kullanın.
BÖLÜM = TÜMÜ
Applies to: SQL Server ve Azure SQL Veritabanı.
Bölüm sıkıştırma ayarlarını değiştirirken tüm bölümleri yeniden oluşturur.
İLE YENIDEN OLUŞTURMA ( <rebuild_option> )
Tüm seçenekler kümelenmiş dizine sahip bir tabloya uygulanır. Tabloda kümelenmiş dizin yoksa yığın yapısı yalnızca bazı seçeneklerden etkilenir.
İşlemle REBUILD belirli bir sıkıştırma ayarı belirtilmediğinde, bölüm için geçerli sıkıştırma ayarı kullanılır. Geçerli ayarı döndürmek için data_compression katalog görünümündeki sys.partitions sütununu sorgula.
Yeniden oluşturma seçeneklerinin tam açıklamaları için bkz. ALTER TABLE index_option (Transact-SQL).
DATA_COMPRESSION
Applies to: SQL Server ve Azure SQL Veritabanı.
Belirtilen tablo, bölüm numarası veya bölüm aralığı için veri sıkıştırma seçeneğini belirtir. Seçenekler şunlardır:
NONE
Tablo veya belirtilen bölümler sıkıştırılamaz. Bu seçenek columnstore tablolarına uygulanmaz.
SIRA
Tablo veya belirtilen bölümler satır sıkıştırma kullanılarak sıkıştırılır. Bu seçenek columnstore tablolarına uygulanmaz.
SAYFA
Tablo veya belirtilen bölümler sayfa sıkıştırma kullanılarak sıkıştırılır. Bu seçenek columnstore tablolarına uygulanmaz.
COLUMNSTORE
Applies to: SQL Server 2014 (12.x) ve sonraki sürümleri ve Azure SQL Veritabanı.
Yalnızca columnstore tablolarına uygulanır.
COLUMNSTOREseçeneğiyle sıkıştırılmış bir bölümün sıkıştırmasını kaldırmayıCOLUMNSTORE_ARCHIVEbelirtir. Veriler geri yüklendiğinde, tüm columnstore tabloları için kullanılan columnstore sıkıştırması ile sıkıştırılmaya devam eder.COLUMNSTORE_ARCHIVE
Applies to: SQL Server 2014 (12.x) ve sonraki sürümleri ve Azure SQL Veritabanı.
Yalnızca kümelenmiş columnstore diziniyle depolanan tablolar olan columnstore tabloları için geçerlidir.
COLUMNSTORE_ARCHIVEbelirtilen bölümü daha küçük bir boyuta sıkıştırır. Arşivleme veya daha az depolama gerektiren ve depolama ve alma için daha fazla zaman ayırabilen diğer durumlar için bu seçeneği kullanın.Aynı anda birden çok bölümü yeniden derlemek için bkz. index_option. Tabloda kümelenmiş dizin yoksa, veri sıkıştırmanın değiştirilmesi yığın ve kümelenmemiş dizinleri yeniden oluşturur. Sıkıştırma hakkında daha fazla bilgi için bkz. Veri sıkıştırma.
Microsoft Fabric'daki SQL veritabanında
ALTER TABLE REBUILD PARTITION WITH DATA COMPRESSION = ROWveyaPAGEizin verilmez.
XML_COMPRESSION
Applies to: SQL Server 2022 (16.x) ve sonraki sürümleri, Azure SQL Veritabanı ve Azure SQL Yönetilen Örneği.
Tablodaki xml veri türü sütunları için XML sıkıştırma seçeneğini belirtir. Seçenekler şunlardır:
ON
xml veri türünü kullanan sütunlar sıkıştırılır.
OFF
xml veri türünü kullanan sütunlar sıkıştırılamaz.
ÇEVRİmİÇİ = { ON | OFF } <single_partition_rebuild_option> için geçerlidir
Dizin işlemi sırasında sorgular ve veri değişikliği için temel tabloların ve ilişkili dizinlerin tek bir bölümünün kullanılabilir olup olmadığını belirtir. Varsayılan değer: OFF. İşlem olarak REBUILD çalıştırabilirsinizONLINE.
ON
Uzun süreli tablo kilitleri dizin işlemi boyunca tutulmaz. Tablodaki S kilidi, dizin yeniden oluşturma işleminin başlangıcında ve çevrimiçi dizin yeniden oluşturma işleminin sonunda tabloda Sch-M kilidi gereklidir. Her iki kilit de kısa meta veri kilitleri olsa da, Sch-M kilidi tüm engelleme işlemlerinin tamamlanmasını beklemelidir. Bekleme süresi boyunca, Sch-M kilidi aynı tabloya erişirken bu kilidin arkasında bekleyen diğer tüm işlemleri engeller.
Note
Çevrimiçi dizin yeniden derlemesi, bu bölümün ilerleyen bölümlerinde açıklanan
low_priority_lock_waitseçeneklerini ayarlayabilir.OFF
Tablo kilitleri dizin işlemi süresi boyunca uygulanır. Bu, işlem süresi boyunca temel alınan tabloya tüm kullanıcı erişimini engeller.
ALL_SPARSE_COLUMNS IÇIN XML COLUMN_SET column_set_name
Applies to: SQL Server ve Azure SQL Veritabanı.
Sütun kümesinin adı. Sütun kümesi, tablonun tüm seyrek sütunlarını yapılandırılmış bir çıktıda birleştiren, yazılmamış bir XML gösterimidir. Seyrek sütun içeren bir tabloya sütun kümesi eklenemez. Sütun kümeleri hakkında daha fazla bilgi için bkz. Sütun kümelerini kullanma.
{ ETKİnLEŞTİr | DISABLE } FILETABLE_NAMESPACE
Applies to: SQL Server.
FileTable'da sistem tanımlı kısıtlamaları etkinleştirir veya devre dışı bırakır. Yalnızca bir FileTable ile kullanılabilir.
SET ( FILETABLE_DIRECTORY = directory_name )
Applies to: SQL Server. Azure SQL Veritabanı FileTable'i desteklemez.
Windows uyumlu FileTable dizin adını belirtir. Bu ad, veritabanındaki tüm FileTable dizin adları arasında benzersiz olmalıdır. SQL harmanlama ayarlarına rağmen benzersizlik karşılaştırması büyük/küçük harfe duyarlı değildir. Yalnızca bir FileTable ile kullanılabilir.
REMOTE_DATA_ARCHIVE
Applies to: SQL Server 2017 (14.x) ve sonraki sürümleri.
Bir tablo için Stretch Database'i etkinleştirir veya devre dışı bırakır. Daha fazla bilgi için bkz. Stretch Database.
Important
Stretch Database, SQL Server 2022 (16.x) ve Azure SQL Veritabanı'da kullanım dışıdır. Bu özellik, Database Engine gelecekteki bir sürümünde kaldırılacaktır. Bu özelliği yeni geliştirme çalışmalarında kullanmaktan kaçının ve şu anda bu özelliği kullanan uygulamaları değiştirmeyi planlayın.
Tablo için Stretch Database'i etkinleştirme
ONbelirterek bir tablo için Esnetmeyi etkinleştirdiğinizde, verileri hemen geçirmeyi başlatmak için MIGRATION_STATE = OUTBOUND veya veri geçişlerini ertelemek için MIGRATION_STATE = PAUSED belirtmeniz gerekir. Varsayılan değer MIGRATION_STATE = OUTBOUND. Bir tablo için Esnetmeyi etkinleştirme hakkında daha fazla bilgi için bkz. bir tablo için Stretch Database'i etkinleştirme.
Prerequisites. Bir tablo için Stretch'i etkinleştirmeden önce, sunucuda ve veritabanında Stretch'i etkinleştirmeniz gerekir. Daha fazla bilgi için bkz. bir veritabanı için Stretch Database'i etkinleştirme.
Permissions. Bir veritabanı veya tablo için Stretch'i etkinleştirmek için db_owner izinleri gerekir. Bir tablo için Esnetme'yi etkinleştirmek için tabloda da izinler gerekir ALTER .
Tablo için Stretch Database'i devre dışı bırakma
Bir tablo için Esnetmeyi devre dışı bırakırsanız, Azure geçirilmiş olan uzak veriler için iki seçeneğiniz vardır. Daha fazla bilgi için bkz. Stretch Database'i devre dışı bırakma veuzak verileri geri getirme.
Bir tablo için Stretch'i devre dışı bırakmak ve tablonun uzak verilerini Azure SQL Server geri kopyalamak için aşağıdaki komutu çalıştırın. Bu komut iptal edilemiyor.
ALTER TABLE <table_name> SET ( REMOTE_DATA_ARCHIVE ( MIGRATION_STATE = INBOUND ) ) ;
Bu işlem veri aktarımı maliyetlerine neden olur ve iptal edilemez. Daha fazla bilgi için bkz. Veri Aktarımları Fiyatlandırma Ayrıntıları.
Tüm uzak veriler Azure SQL Server geri kopyalandıktan sonra, tablo için Esnetme devre dışı bırakılır.
Bir tablo için Stretch'i devre dışı bırakmak ve uzak verileri bırakmak için aşağıdaki komutu çalıştırın.
ALTER TABLE <table_name> SET ( REMOTE_DATA_ARCHIVE = OFF_WITHOUT_DATA_RECOVERY ( MIGRATION_STATE = PAUSED ) ) ;
Bir tablo için Stretch Database'i devre dışı bırakdıktan sonra, veri geçişi durdurulur ve sorgu sonuçları artık uzak tablodan sonuçlar içermez.
Esnetme'nin devre dışı bırakılması uzak tabloyu kaldırmaz. Uzak tabloyu silmek istiyorsanız, Azure portalını kullanarak bırakın.
[ FILTER_PREDICATE = { null | koşul } ]
Applies to: SQL Server 2017 (14.x) ve sonraki sürümleri.
İsteğe bağlı olarak, hem geçmiş hem de geçerli verileri içeren bir tablodan geçirilebilen satırları seçmek için bir filtre koşulu belirtir. Koşul, belirleyici bir satır içi tablo değerli işlevi çağırmalıdır. Daha fazla bilgi için bkz. Bir tablo için Esnetme Veritabanını Etkinleştirme ve filtre işlevi kullanarak geçirileceği satırları seçme - Stretch Database.
Important
Kötü performans gösteren bir filtre koşulu sağlarsanız, veri geçişi de düşük performans gösterir. Stretch Database, işlecini kullanarak tabloya filtre koşulunu CROSS APPLY uygular.
Filtre koşulu belirtmezseniz tablonun tamamı geçirilir.
Bir filtre koşulu belirttiğinizde de belirtmeniz MIGRATION_STATEgerekir.
MIGRATION_STATE = { GIDEN | GELEN | DURAKLATILDI }
Applies to: SQL Server 2017 (14.x) ve sonraki sürümleri.
verileri SQL Server Azure geçirmek için
OUTBOUNDbelirtin.Tablonun uzak verilerini Azure SQL Server geri kopyalamak ve tablo için Esnetmeyi devre dışı bırakmak için
INBOUNDbelirtin. Daha fazla bilgi için bkz. Stretch Database'i devre dışı bırakma veuzak verileri geri getirme.Bu işlem veri aktarımı maliyetlerine neden olur ve iptal edilemez.
Veri geçişlerini duraklatmak veya ertelemek için
PAUSEDbelirtin. Daha fazla bilgi için bkz. Veri geçişlerini duraklatma ve sürdürme - Stretch Database.
WAIT_AT_LOW_PRIORITY
Applies to: SQL Server 2014 (12.x) ve sonraki sürümleri ve Azure SQL Veritabanı.
Çevrimiçi dizin yeniden derlemesi, bu tabloda engelleme işlemlerini beklemek zorunda.
WAIT_AT_LOW_PRIORITY çevrimiçi dizin yeniden oluşturma işleminin düşük öncelikli kilitleri beklediğini ve çevrimiçi dizin derleme işlemi beklerken diğer işlemlerin devam etmelerine olanak tanıydığını gösterir. Seçeneğin atlanması WAIT AT LOW PRIORITY ile aynıdır WAIT_AT_LOW_PRIORITY ( MAX_DURATION = 0 minutes, ABORT_AFTER_WAIT = NONE).
MAX_DURATION = saat [ DAKİkA ]
Applies to: SQL Server 2014 (12.x) ve sonraki sürümleri ve Azure SQL Veritabanı.
dakika cinsinden belirtilen bir tamsayı değeri olan veya çevrimiçi dizini yeniden oluşturmanın SWITCH DDL komutunu çalıştırırken düşük öncelikli olarak beklediği bekleme süresi. İşlem bu süre boyunca MAX_DURATION engellenirse, eylemlerden ABORT_AFTER_WAIT biri çalışır.
MAX_DURATION zaman her zaman dakika cinsindendir ve sözcüğünü MINUTESatlayabilirsiniz.
ABORT_AFTER_WAIT = { YOK | SELF | ENGELLEYICILER }
Applies to: SQL Server 2014 (12.x) ve sonraki sürümleri ve Azure SQL Veritabanı.
NONE
Normal (normal) önceliğe sahip kilidi beklemeye devam edin.
SELF
Şu anda çalıştırılmakta olan
SWITCHveya çevrimiçi dizin yeniden oluşturma DDL işleminden herhangi bir işlem yapmadan çıkın.BLOCKERS
İşlemin devam edebilmesi için şu anda veya çevrimiçi dizini yeniden oluşturma DDL işlemini engelleyen
SWITCHtüm kullanıcı işlemlerini sonlandırma.İzin gerektirir
ALTER ANY CONNECTION.
VARSA
Applies to: SQL Server 2016 (13.x) ve sonraki sürümleri ve Azure SQL Veritabanı.
Sütunu veya kısıtlamayı koşullu olarak yalnızca zaten varsa bırakır.
RESUMABLE = { ON | KAPALI}
Applies to: SQL Server 2022 (16.x) ve sonraki sürümleri.
bir ALTER TABLE ADD CONSTRAINT işleminin devam ettirilebilir olup olmadığını belirtir.
ONtablo kısıtlaması ekleme işlemi devam ettirilebilir.
OFFtablo kısıtlaması ekleme işlemi devam ettirilemez. Varsayılan değer OFF.
RESUMABLE seçeneği, ALTER TABLE table_constraint (Transact-SQL)ALTER TABLE index_option (Transact-SQL) parçası olarak kullanılabilir.
MAX_DURATION ile RESUMABLE = ON kullanıldığında (gerektirir ONLINE = ON), duraklatılmadan önce devam ettirilebilir bir çevrimiçi ekleme kısıtlaması işleminin yürütüldüğünü belirten zamanı (dakika cinsinden belirtilen bir tamsayı değeri) gösterir. Belirtilmezse, işlem tamamlanmadan devam eder.
Devam ettirilebilen ALTER TABLE ADD CONSTRAINT işlemleri etkinleştirme ve kullanma hakkında daha fazla bilgi için bkz. Devam ettirilebilir tablo ekleme kısıtlamaları.
Remarks
Yeni veri satırları eklemek için INSERT (Transact-SQL) kullanın. Veri satırlarını kaldırmak için DELETE (Transact-SQL) veya TRUNCATE TABLE (Transact-SQL) kullanın. Var olan satırlardaki değerleri değiştirmek için UPDATE (Transact-SQL) kullanın.
Yordam önbelleğinde tabloya başvuran yürütme planları varsa, ALTER TABLE bunları bir sonraki yürütmelerinde yeniden derlenecek şekilde işaretler.
Şu anda bellek içi, kayıt defteri, kayıt defteri geçmişi ve Always Encrypted tabloları Microsoft Fabric'daki SQL veritabanında oluşturulamaz. Daha fazla bilgi için bkz. Microsoft Fabric'da SQL veritabanında
Microsoft Fabric'daki SQL veritabanında bazı tablo özellikleri oluşturulabilir ancak Fabric OneLake içine aktarılamaz. Daha fazla bilgi için bkz. Fabric SQL veritabanı yansıtma için
Fabric Data Warehouse'da desteklenen ALTER TABLE Transact-SQL işlemleri açık bir kullanıcı tanımlı işlem içinde yürütülebilir. Daha fazla bilgi için bkz. Fabric Data Warehouse
Fabric Data Warehouse'da dağıtılmış #temp tablolarını ALTER TABLE ile değiştirebilirsiniz ancak MDF destekli geçici tablolarla değiştiremezsiniz. Daha fazla bilgi için bkz. Fabric Data Warehouse
Sütunun boyutunu değiştirme
Sütun veri türü için yeni bir boyut belirterek sütunun uzunluğunu, duyarlığı veya ölçeğini değiştirebilirsiniz. yan tümcesini ALTER COLUMN kullanın. Sütunda veri varsa, yeni boyut verilerin maksimum boyutundan küçük olamaz. Ayrıca, sütun bir varchar, nvarchar veya varbinary veri türü değilse ve dizin bir PRIMARY KEY kısıtlamanın sonucu değilse, dizinde sütunu tanımlayamazsınız. Sütun Tanımını Değiştirme
Kilitler ve ALTER TABLE
içinde ALTER TABLE belirttiğiniz değişiklikler hemen geçerli olur. Değişiklikler tablodaki satırlarda değişiklik yapılmasını gerektiriyorsa, ALTER TABLE satırları güncelleştirir.
ALTER TABLE , sonunda kısa bir Sch-M kilidi gerektiren çevrimiçi dizin işlemleri dışında, değişiklik sırasında tablonun meta verilerine başka hiçbir bağlantının başvurmadığından emin olmak için tabloda şema değiştirme (Sch-M) kilidi alır.
ALTER TABLE...SWITCH bir işlemde kilit hem kaynak hem de hedef tablolarda alınır. Tabloda yapılan değişiklikler günlüğe kaydedilir ve tamamen kurtarılabilir. Sütun bırakma veya SQL Server bazı sürümlerinde varsayılan değere sahip bir NOT NULL sütunu ekleme gibi büyük tablolardaki tüm satırları etkileyen değişikliklerin tamamlanması ve çok sayıda günlük kaydı oluşturulması uzun sürebilir. Bu ALTER TABLE deyimleri, birçok satırı etkileyen herhangi bir INSERT, UPDATEveya DELETE deyimiyle aynı özenle çalıştırın.
Bölüm anahtarı için Genişletilmiş Olaylar (XEvents)
Aşağıdaki XEvents,
- lock_request_priority_state
- process_killed_by_abort_blockers
- ddl_with_wait_at_low_priority
Not NULL sütunlarını çevrimiçi işlem olarak ekleme
SQL Server 2012 (11.x) Enterprise sürümü ve sonraki sürümlerinde varsayılan değerle NOT NULL sütunu eklemek, varsayılan değer runtime sabiti olduğunda çevrimiçi bir işlemdir. Bu varsayılan davranış, tablodaki satır sayısına rağmen işlemin neredeyse anında tamamlandığını gösterir çünkü tablodaki mevcut satırlar işlem sırasında güncelleştirilmez. Bunun yerine, varsayılan değer yalnızca tablonun meta verilerinde depolanır ve değer gerektiğinde bu satırlara erişen sorgularda aranır. Bu davranış otomatiktir. Çevrimiçi işlemi söz diziminin ötesinde ADD COLUMN uygulamak için ek söz dizimi gerekmez. Çalışma zamanı sabiti, determinizmine rağmen tablodaki her satır için çalışma zamanında aynı değeri üreten bir ifadedir. Örneğin, sabit ifadesi "My temporary data"veya sistem işlevi GETUTCDATETIME() çalışma zamanı sabitleridir. Buna karşılık, tablodaki her satır için benzersiz bir değer üretildiği için NEWID() veya NEWSEQUENTIALID() işlevleri çalışma zamanı sabitleri değildir.
NOT NULL Çalışma zamanı sabiti olmayan varsayılan değere sahip bir sütun eklemek her zaman çevrimdışı çalıştırılır ve işlem süresi boyunca özel (Sch-M) bir kilit alınır.
Mevcut satırlar meta verilerde depolanan değere başvururken, eklenen ve sütun için başka bir değer belirtmeyen yeni satırlar için varsayılan değer satırda depolanır. Meta verilerde depolanan varsayılan değer, satır güncelleştirildiğinde (gerçek sütun deyiminde UPDATE belirtilmemiş olsa bile) veya tablo veya kümelenmiş dizin yeniden oluşturulduğunda var olan bir satıra taşınır.
Çevrimiçi bir işlemde varchar(max), nvarchar(max), varbinary(max), xml, text, ntext, image, hierarchyid, geometry, geography veya CLR kullanıcı tanımlı türler türünde sütunlar ekleyemezsiniz. Bunun yapılması, olası en büyük satır boyutunun 8.060 bayt sınırını aşmasına neden oluyorsa, çevrimiçi sütun ekleyemezsiniz. Bu durumda sütun çevrimdışı bir işlem olarak eklenir.
Paralel plan yürütme
SQL Server 2012 (11.x) Enterprise sürümü ve sonraki sürümlerinde max degree of parallelism yapılandırma seçeneği ve geçerli iş yükü, tek bir ALTER TABLE ADD (dizin tabanlı) CONSTRAINT veya DROP (kümelenmiş dizin) CONSTRAINT deyimi çalıştıran işlemci sayısını belirler. Database Engine sistemin meşgul olduğunu algılarsa, deyimi yürütme başlamadan önce işlemin paralellik derecesini otomatik olarak azaltır. seçeneğini belirterek MAXDOP deyimini çalıştıran işlemci sayısını el ile yapılandırabilirsiniz. Daha fazla bilgi için bkz . Sunucu yapılandırması: maksimum paralellik derecesi.
Bölümlenmiş tablolar
Bölümlenmiş tablolar içeren işlemler gerçekleştirmeye SWITCH ek olarak, ALTER TABLE bölümlenmiş bir tablonun sütunlarının, kısıtlamalarının ve tetikleyicilerinin durumunu değiştirmek için kullanın; aynı bölümlenmemiş tablolarda kullandığınız gibi. Ancak, tablonun bölümlenme biçimini değiştirmek için bu deyimi kullanamazsınız. Bölümlenmiş tabloyu yeniden bölümlendirmek için ALTER PARTITION SCHEME (Transact-SQL) ve ALTER PARTITION FUNCTION (Transact-SQL) kullanın. Ayrıca, bölümlenmiş bir tablonun sütununun veri türünü değiştiremezsiniz.
Şemaya bağlı görünümlere sahip tablolarda kısıtlamalar
Şemaya bağlı görünümlere sahip tablolardaki deyimler için ALTER TABLE geçerli olan kısıtlamalar, basit bir dizine sahip tabloları değiştirirken geçerli olan kısıtlamalarla aynıdır. Sütun ekleyebilirsiniz. Ancak, şemaya bağlı hiçbir görünüme katılan bir sütunu kaldıramaz veya değiştiremezsiniz.
ALTER TABLE deyimi şemaya bağlı görünümde kullanılan bir sütunu değiştirmeyi gerektiriyorsa, ALTER TABLE başarısız olur ve Database Engine bir hata iletisi oluşturur. Şema bağlaması ve dizine alınan görünümler hakkında daha fazla bilgi için bkz. CREATE VIEW (Transact-SQL).
Temel tablolarda tetikleyicilerin eklenmesi veya kaldırılması, tablolara başvuran şemaya bağlı bir görünüm oluşturulmasından etkilenmez.
Dizinler ve ALTER TABLE
Kısıtlamanın bir parçası olarak oluşturulan dizinler, kısıtlama bırakıldığında bırakılır. kullanarak CREATE INDEXoluşturduğunuz dizinleri bırakmak için kullanın DROP INDEX. Kısıtlama tanımının ALTER INDEX parçası olan bir dizini yeniden oluşturmak için deyimini kullanın. kullanarak ALTER TABLEkısıtlamayı yeniden bırakmanız ve eklemeniz gerekmez.
Bu sütunu kaldırabilmeniz için önce bir sütunu temel alan tüm dizinleri ve kısıtlamaları kaldırmanız gerekir.
Kümelenmiş dizin oluşturan bir kısıtlamayı sildiğinizde, kümelenmiş dizinin yaprak düzeyinde depolanan veri satırları, kümelenmemiş bir tabloda depolanır. Seçeneğini belirterek kümelenmiş dizini bırakabilir ve sonuçta elde edilen tabloyu tek bir işlemde başka bir dosya grubuna veya bölüm düzenine MOVE TO taşıyabilirsiniz. seçeneği MOVE TO aşağıdaki kısıtlamalara sahiptir:
MOVE TOdizinlenmiş görünümler veya kümelenmemiş dizinler için geçerli değildir.Bölüm şeması veya dosya grubu zaten mevcut olmalıdır.
belirtmezseniz
MOVE TO, tablo kümelenmiş dizin için tanımlanan bölüm düzeninde veya dosya grubunda bulunur.
Kümelenmiş dizini bıraktığınızda, işlemin temel alınan verilerde ve ilişkili kümelenmemiş dizinlerde sorguları ve değişiklikleri engellememesi için seçeneğini ONLINE = ON belirtinDROP INDEX.
ONLINE = ON aşağıdaki kısıtlamalara sahiptir:
-
ONLINE = ON, devre dışı bırakılmış kümelenmiş dizinler için geçerli değildir. devre dışı bırakılmış dizinleri kullanarakONLINE = OFFbırakmanız gerekir. - Bir kerede yalnızca bir dizin bırakabilirsiniz.
-
ONLINE = ONdizinli görünümler, kümelenmemiş dizinler veya yerel geçici tablolardaki dizinler için geçerli değildir. -
ONLINE = ONcolumnstore dizinleri için geçerli değildir.
Kümelenmiş dizini bırakmak için mevcut kümelenmiş dizinin boyutuna eşit geçici disk alanı gerekir. Bu işlem tamamlandığında ek alanı serbest bırakır.
Note
altında <drop_clustered_constraint_option> listelenen seçenekler tablolardaki kümelenmiş dizinlere uygulanır. Bu seçenekleri görünümlerde veya kümelenmemiş dizinlerde kümelenmiş dizinlere uygulayamazsınız.
Şema değişikliklerini çoğaltma
SQL Server Publisher yayımlanan bir tabloda ALTER TABLE çalıştırdığınızda, değişiklik varsayılan olarak tüm SQL Server Abonelerine yayılır. Bu işlevin bazı kısıtlamaları vardır. Devre dışı bırakabilirsiniz. Daha fazla bilgi için bkz. Yayın Veritabanlarında Şema Değişiklikleri Yapma.
Veri sıkıştırma
Sistem tabloları için sıkıştırmayı etkinleştiremezsiniz. Tablo bir yığınsa, mod için ONLINE yeniden oluşturma işlemi tek iş parçacıklı olur. Çok iş parçacıklı yığın yeniden oluşturma işlemi için modu kullanın OFFLINE . Veri sıkıştırma hakkında daha fazla bilgi için bkz. Veri sıkıştırma.
Sıkıştırma durumunu değiştirmenin bir tabloyu, dizini veya bölümü nasıl etkilediğini değerlendirmek için sp_estimate_data_compression_savings sistem saklı yordamını kullanın.
Bölümlenmiş tablolar için aşağıdaki kısıtlamalar geçerlidir:
- Tabloda hizalanmamış dizinler varsa tek bir bölümün sıkıştırma ayarını değiştiremezsiniz.
-
ALTER TABLE <table> REBUILD PARTITION... söz dizimi belirtilen bölümü yeniden oluşturur. -
ALTER TABLE <table> REBUILD WITH... söz dizimi tüm bölümleri yeniden oluşturur.
Ntext sütunlarını bırakma
Kullanım dışı bırakılmış ntext veri türünü kullanan sütunları bıraktığınızda, silinen verilerin temizlenmesi tüm satırlarda serileştirilmiş bir işlem olarak gerçekleşir. Temizleme işlemi büyük miktarda zaman gerektirebilir. Çok sayıda satır içeren bir tabloya ntext sütunu bıraktığınızda, ntext sütununu önce değere NULL güncelleştirin ve sonra sütunu bırakın. Bu seçeneği paralel işlemlerle çalıştırabilir ve çok daha hızlı hale getirebilirsiniz.
Çevrimiçi dizin yeniden oluşturma
Çevrimiçi dizin yeniden derlemesi için DDL deyimini çalıştırmak için, belirli bir tabloda çalışan tüm etkin engelleme işlemlerinin tamamlanması gerekir. Çevrimiçi dizin yeniden derlemesi başlatıldığında, bu tabloda çalışmaya başlamaya hazır olan tüm yeni işlemleri engeller. Çevrimiçi dizin yeniden oluşturma için kilidin süresi kısa olsa da, belirli bir tablodaki tüm açık işlemlerin tamamlanmasını beklemek ve yeni işlemlerin başlatılmasını engellemek aktarım hızını önemli ölçüde etkileyebilir. Bu kilit beklemesi, bir iş yükünün yavaşlamasına veya zaman aşımına neden olabilir ve temel tabloya erişimi önemli ölçüde sınırlayabilir. seçeneği WAIT_AT_LOW_PRIORITY , DTA'ların çevrimiçi dizin yeniden derlemeleri için gereken S-lock ve Sch-M kilitlerini yönetmesine olanak tanır. Üç durumda da: NONE, SELFve BLOCKERS, bekleme süresi(MAX_DURATION = n [minutes]) () sırasında hiçbir engelleme etkinliği yoksa, çevrimiçi dizin yeniden oluşturma işlemi beklemeden hemen çalışır ve DDL deyimi tamamlanır.
Uyumluluk desteği
deyimi ALTER TABLE yalnızca iki bölümlü (schema.object) tablo adlarını destekler. SQL Server'da, aşağıdaki biçimleri kullanarak bir tablo adı belirtme işlemi derleme zamanında 117 hatasıyla başarısız olur.
server.database.schema.table.database.schema.table..schema.table
Önceki sürümlerde, biçimi belirterek server.database.schema.table hata 4902 döndürdü.
.database.schema.table biçimini veya başarılı ..schema.table biçimini belirtme.
Sorunu çözmek için dört bölümlü ön ek kullanımını kaldırın.
Permissions
ALTER Tabloda izin gerektirir.
ALTER TABLE izinleri bir ALTER TABLE SWITCH deyimde yer alan her iki tablo için de geçerlidir. Anahtarlanan tüm veriler hedef tablonun güvenliğini devralır.
Deyiminde ALTER TABLE ortak dil çalışma zamanı (CLR) kullanıcı tanımlı türde veya diğer ad veri türünde olacak sütunlar tanımlarsanız, REFERENCES tür üzerinde izin gerekir.
Tablonun satırlarını güncelleştiren bir sütunu eklemek veya değiştirmek için tabloda izin gerekir UPDATE . Örneğin, varsayılan değere sahip bir NOT NULL sütun ekleme veya tablo boş olmadığında kimlik sütunu ekleme.
Examples
Bu makaledeki kod örnekleri, Microsoft SQL Server Örnekler ve Topluluk Projeleri giriş sayfasından indirebileceğiniz AdventureWorks2025 veya AdventureWorksDW2025 örnek veritabanını kullanır.
| Category | Öne çıkan söz dizimi öğeleri |
|---|---|
| Sütun ve kısıtlama ekleme |
ADD; PRIMARY KEY dizin seçenekleri, seyrek sütunlar ve sütun kümeleri ile |
| sütunları ve kısıtlamaları bırakma |
DROP |
| Sütun tanımını değiştirme | Veri türünü değiştirme; sütun boyutunu değiştirme; Harmanlama |
| Tablo tanımını değiştirme |
DATA_COMPRESSION; SWITCH PARTITION; ; LOCK ESCALATION değişiklik izleme |
| Kısıtlamaları ve tetikleyicileri devre dışı bırakma ve etkinleştirme |
CHECK; NO CHECK; ; ENABLE TRIGGERDISABLE TRIGGER |
| Çevrimiçi işlemler | ONLINE |
| Sistem sürümü oluşturma | SYSTEM_VERSIONING |
Sütun ve kısıtlama ekleme
Bu bölümdeki örneklerde tabloya sütun ve kısıtlama ekleme gösterilmektedir.
A. Yeni sütun ekleme
Aşağıdaki örnek, null değerlere izin veren ve tanım içermeyen bir DEFAULT sütun ekler. Yeni sütunda her satırda vardır NULL.
CREATE TABLE dbo.doc_exa (column_a INT);
GO
ALTER TABLE dbo.doc_exa
ADD column_b VARCHAR (20) NULL;
GO
B. Kısıtlaması olan bir sütun ekleme
Aşağıdaki örnek, UNIQUE kısıtlaması olan yeni bir sütun ekler.
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
EXECUTE sp_help doc_exc;
GO
DROP TABLE dbo.doc_exc;
GO
C. Var olan bir sütuna doğrulamasız CHECK kısıtlaması ekleme
Aşağıdaki örnek, tablodaki mevcut bir sütuna kısıtlama ekler. Sütun, kısıtlamayı ihlal eden bir değere sahiptir. Bu nedenle, örnek kısıtlamanın mevcut satırlarda doğrulanmasını önlemek ve kısıtlamanın eklenmesine izin vermek için kullanır WITH NOCHECK .
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
EXECUTE sp_help doc_exd;
GO
DROP TABLE dbo.doc_exd;
GO
D. Var olan bir sütuna DEFAULT kısıtlaması ekleme
Aşağıdaki örnek, iki sütunlu bir tablo oluşturur ve diğer sütun kalırken NULLilk sütuna bir değer ekler. Örnek daha sonra ikinci sütuna bir DEFAULT kısıtlama ekler. Varsayılanın uygulandığını doğrulamak için örnek, ilk sütuna başka bir değer ekler ve tabloyu sorgular.
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
E. Kısıtlamaları olan birkaç sütun ekleme
Aşağıdaki örnek, yeni sütunla tanımlanan kısıtlamalara sahip birkaç sütun ekler. İlk yeni sütunda IDENTITY özelliği vardır. Tablodaki her satır, kimlik sütununda yeni artımlı değerlere sahiptir.
CREATE TABLE dbo.doc_exe
(
column_a INT
CONSTRAINT column_a_un UNIQUE
);
GO
ALTER TABLE dbo.doc_exe
-- Add a PRIMARY KEY identity column.
ADD 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 FOREIGN KEY 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
EXECUTE sp_help doc_exe;
GO
DROP TABLE dbo.doc_exe;
GO
F. Varsayılan değerlerle boş değer atanabilir sütun ekleme
Aşağıdaki örnek, DEFAULT tanımına sahip null atanabilir bir sütun ekler ve tablodaki mevcut her satır için değer sağlamak için WITH VALUES kullanır. kullanmıyorsanız WITH VALUES, her satır yeni sütundaki değere NULL sahiptir.
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
CONSTRAINT AddDateDflt DEFAULT GETDATE() WITH VALUES NULL;
GO
DROP TABLE dbo.doc_exf;
GO
G. Dizin veya veri sıkıştırma seçenekleriyle BİrİnCİl ANAHTAR kısıtlaması oluşturma
Aşağıdaki örnek kısıtlamayı PRIMARY KEYPK_TransactionHistoryArchive_TransactionID oluşturur ve , FILLFACTORve ONLINEseçeneklerini PAD_INDEXayarlar. Sonuçta elde edilen kümelenmiş dizin kısıtlamayla aynı ada sahiptir.
Applies to: SQL Server ve Azure SQL Veritabanı.
USE AdventureWorks2022;
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
Bu benzer örnek, kümelenmiş birincil anahtar uygulanırken sayfa sıkıştırma uygular.
USE AdventureWorks2022;
GO
ALTER TABLE Production.TransactionHistoryArchive WITH NOCHECK
ADD CONSTRAINT PK_TransactionHistoryArchive_TransactionID
PRIMARY KEY CLUSTERED (TransactionID) WITH (DATA_COMPRESSION = PAGE);
GO
H. Seyrek sütun ekleme
Aşağıdaki örneklerde T1 tablosunda seyrek sütunların eklenmesi ve değiştirilmesi gösterilmektedir. Tablo T1 oluşturma kodu aşağıdaki gibidir.
CREATE TABLE T1
(
C1 INT PRIMARY KEY,
C2 VARCHAR (50) SPARSE NULL,
C3 INT SPARSE NULL,
C4 INT
);
GO
C5başka bir seyrek sütun eklemek için aşağıdaki deyimi yürütür.
ALTER TABLE T1
ADD C5 CHAR (100) SPARSE NULL;
GO
Seyrek olmayan C4 sütununu seyrek sütuna dönüştürmek için aşağıdaki deyimi yürütün.
ALTER TABLE T1
ALTER COLUMN C4 ADD SPARSE;
GO
C4 seyrek sütununu seyrek olmayan bir sütuna dönüştürmek için aşağıdaki deyimi yürütün.
ALTER TABLE T1
ALTER COLUMN C4 DROP SPARSE;
GO
I. Sütun kümesi ekleme
Aşağıdaki örneklerde tabloya T2sütun ekleme gösterilmektedir. Zaten seyrek sütunlar içeren bir tabloya sütun kümesi ekleyemezsiniz. Aşağıdaki kod, tablosunu T2oluşturur.
CREATE TABLE T2
(
C1 INT PRIMARY KEY,
C2 VARCHAR (50) NULL,
C3 INT NULL,
C4 INT
);
GO
Aşağıdaki üç deyim, CSadlı bir sütun kümesi ekler ve ardından C2 ve C3 sütunları SPARSE olarak değiştirir.
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
J. Şifrelenmiş sütun ekleme
Aşağıdaki deyim, PromotionCodeadlı şifrelenmiş bir sütun ekler.
ALTER TABLE Customers
ADD PromotionCode NVARCHAR (100)
ENCRYPTED WITH (
COLUMN_ENCRYPTION_KEY = MyCEK,
ENCRYPTION_TYPE = RANDOMIZED,
ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256'
);
K. Devam ettirilebilir işlemle birincil anahtar ekleme
240 dakikalık ALTER TABLE ile (a) sütununda kümelenmiş bir birincil anahtar eklemek için devam ettirilebilen MAX_DURATION işlemi.
ALTER TABLE table1
ADD CONSTRAINT PK_Constrain PRIMARY KEY CLUSTERED (a)
WITH (ONLINE = ON, MAXDOP = 2, RESUMABLE = ON, MAX_DURATION = 240);
Sütunları ve kısıtlamaları bırakma
Bu bölümdeki örneklerde sütunların ve kısıtlamaların nasıl bırakılıp bırakılamları gösterilmektedir.
A. Sütun veya sütun bırakma
İlk örnek, sütunu kaldırmak için tabloyu değiştirir. İkinci örnek birden çok sütunu kaldırır.
CREATE TABLE dbo.doc_exb
(
column_a INT,
column_b VARCHAR (20) NULL,
column_c DATETIME,
column_d INT
);
GO
-- Remove a single column.
ALTER TABLE dbo.doc_exb DROP COLUMN column_b;
GO
-- Remove multiple columns.
ALTER TABLE dbo.doc_exb DROP COLUMN column_c, column_d;
B. Kısıtlamaları ve sütunları bırakma
İlk örnek, tablodan UNIQUE kısıtlamasını kaldırır. İkinci örnek iki kısıtlamayı ve tek bir sütunu kaldırır.
CREATE TABLE dbo.doc_exc
(
column_a INT NOT NULL
CONSTRAINT my_constraint UNIQUE
);
GO
-- Example 1. Remove a single constraint.
ALTER TABLE dbo.doc_exc DROP my_constraint;
GO
DROP TABLE dbo.doc_exc;
GO
CREATE TABLE dbo.doc_exc
(
column_a INT NOT NULL
CONSTRAINT my_constraint UNIQUE,
column_b INT NOT NULL
CONSTRAINT my_pk_constraint PRIMARY KEY
);
GO
-- Example 2. Remove two constraints and one column
-- The keyword CONSTRAINT is optional. The keyword COLUMN is required.
ALTER TABLE dbo.doc_exc
DROP CONSTRAINT my_constraint, my_pk_constraint, COLUMN column_b;
GO
C. BİRİnCİl ANAHTAR kısıtlamasını ÇEVRİmİÇİ modunda bırakma
Aşağıdaki örnek, seçeneği olarak ayarlanmış PRIMARY KEYbir ONLINE kısıtlamayı ON siler.
ALTER TABLE Production.TransactionHistoryArchive
DROP CONSTRAINT PK_TransactionHistoryArchive_TransactionID
WITH (ONLINE = ON);
GO
D. YABANCı ANAHTAR kısıtlaması ekleme ve bırakma
Aşağıdaki örnek, tablosunu ContactBackupoluşturur ve tabloyu değiştirir. İlk olarak, tablosuna Person.Personbaşvuran bir FOREIGN KEY kısıtlama ekler. Ardından kısıtlamayı FOREIGN KEY düşürür.
CREATE TABLE Person.ContactBackup (ContactID INT);
GO
ALTER TABLE Person.ContactBackup
ADD CONSTRAINT FK_ContactBackup_Contact
FOREIGN KEY (ContactID) REFERENCES Person.Person (BusinessEntityID);
GO
ALTER TABLE Person.ContactBackup
DROP CONSTRAINT FK_ContactBackup_Contact;
GO
DROP TABLE Person.ContactBackup;
Sütun tanımını değiştirme
A. Sütunun veri türünü değiştirme
Aşağıdaki örnek, bir tablonun sütununu INTDECIMALolarak değiştirir.
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
B. Sütunun boyutunu değiştirme
Aşağıdaki örnek, varchar sütununun boyutunu ve ondalık sütununun duyarlık ve ölçeğini artırır. Sütunlar veri içerdiğinden yalnızca sütun boyutunu artırabilirsiniz. Ayrıca col_a benzersiz bir dizinde tanımlandığına dikkat edin. Veri türü bir varchar olduğundan ve dizin bir PRIMARY KEY kısıtlamanın sonucu olmadığından boyutunu col_a yine de artırabilirsiniz.
-- 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');
C. Sütun harmanlamasını değiştirme
Aşağıdaki örnekte bir sütunun harmanlamasını değiştirme işlemi gösterilmektedir. İlk olarak, varsayılan kullanıcı harmanlaması ile bir tablo oluşturursunuz.
CREATE TABLE T3
(
C1 INT PRIMARY KEY,
C2 VARCHAR (50) NULL,
C3 INT NULL,
C4 INT
);
GO
Ardından sütunun harmanlamasını C2 olarak Latin1_General_BINdeğiştirin. Değiştirilmese bile veri türünü belirtmeniz gerekir.
ALTER TABLE T3
ALTER COLUMN C2 VARCHAR (50) COLLATE Latin1_General_BIN;
GO
D. Sütunu şifreleme
Aşağıdaki örnekte , güvenli kuşatmalarla Always Encrypted kullanarak bir sütunun nasıl şifrelenmesi gösterilmektedir.
İlk olarak, şifrelenmiş sütun içermeyen bir tablo oluşturursunuz.
CREATE TABLE T3
(
C1 INT PRIMARY KEY,
C2 VARCHAR (50) NULL,
C3 INT NULL,
C4 INT
);
GO
Ardından, sütunu C2 adlı CEK1bir sütun şifreleme anahtarı ve rastgele şifreleme ile şifreleyin. Aşağıdaki deyimin başarılı olması için:
- Sütun şifreleme anahtarının kapanım etkin olması gerekir. Bu gereksinim, kapanım hesaplamalarına izin veren bir sütun
masteranahtarı (CMK) kullanılarak şifrelenmesinin gerektiği anlamına gelir. - Hedef SQL Server örneği güvenli kuşatmalarla Always Encrypted'ı desteklemelidir.
- Deyiminin güvenli kuşatmalarla Always Encrypted için ayarlanmış bir bağlantı üzerinden ve desteklenen bir istemci sürücüsü kullanılarak verilmesi gerekir.
- Çağıran uygulamanın cmk'ye erişimi olmalıdır ve bunu
CEK1korumalıdır.
ALTER TABLE T3 ALTER COLUMN C2 VARCHAR (50) ENCRYPTED WITH (
COLUMN_ENCRYPTION_KEY = [CEK1],
ENCRYPTION_TYPE = RANDOMIZED,
ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256'
) NULL;
GO
Tablo tanımını değiştirme
Bu bölümdeki örneklerde bir tablonun tanımının nasıl değiştir olduğu gösterilmektedir.
A. Sıkıştırmayı değiştirmek için tabloyu değiştirme
Aşağıdaki örnek bölümlenmemiş bir tablonun sıkıştırmasını değiştirir. Yığın veya kümelenmiş dizin yeniden oluşturulur. Tablo bir yığınsa, tüm kümelenmemiş dizinler yeniden oluşturulur.
ALTER TABLE T1 REBUILD
WITH (DATA_COMPRESSION = PAGE);
Aşağıdaki örnek bölümlenmiş tablonun sıkıştırmasını değiştirir.
REBUILD PARTITION = 1 söz dizimi yalnızca bölüm numarasının yeniden oluşturulmasına 1 neden olur.
Applies to: SQL Server.
ALTER TABLE PartitionTable1 REBUILD PARTITION = 1
WITH (DATA_COMPRESSION = NONE);
GO
Aşağıdaki alternatif söz dizimini kullanan aynı işlem, tablodaki tüm bölümlerin yeniden oluşturulmasına neden olur.
Applies to: SQL Server.
ALTER TABLE PartitionTable1 REBUILD PARTITION = ALL
WITH (DATA_COMPRESSION = PAGE ON PARTITIONS (1));
Ek veri sıkıştırma örnekleri için bkz. Veri sıkıştırma.
B. Arşiv sıkıştırmasını değiştirmek için columnstore tablosunu değiştirme
Aşağıdaki örnek, ek bir sıkıştırma algoritması uygulayarak columnstore tablo bölümünü daha da sıkıştırır. Bu sıkıştırma, tabloyu daha küçük bir boyuta indirir, ancak depolama ve alma için gereken süreyi de artırır. Bu sıkıştırma, arşivleme veya daha az alan gerektiren ve depolama ve alma için daha fazla zaman ayırabilen durumlar için kullanışlıdır.
Applies to: SQL Server 2014 (12.x) ve sonraki sürümleri ve Azure SQL Veritabanı.
ALTER TABLE PartitionTable1 REBUILD PARTITION = 1
WITH (DATA_COMPRESSION = COLUMNSTORE_ARCHIVE);
GO
Aşağıdaki örnek, seçenekle COLUMNSTORE_ARCHIVE sıkıştırılmış bir columnstore tablo bölümünün sıkıştırmasını kaldırmaktadır. Veriler geri yüklendiğinde, tüm columnstore tabloları için kullanılan columnstore sıkıştırması ile sıkıştırılmaya devam eder.
Applies to: SQL Server 2014 (12.x) ve sonraki sürümleri ve Azure SQL Veritabanı.
ALTER TABLE PartitionTable1 REBUILD PARTITION = 1
WITH (DATA_COMPRESSION = COLUMNSTORE);
GO
C. Tablolar arasında bölümler arasında geçiş yapma
Aşağıdaki örnek, bölüm düzeni myRangePS1 veritabanında zaten oluşturulduğu varsayılarak bölümlenmiş bir tablo oluşturur. Ardından, bölümlenmiş tabloyla aynı yapıya sahip ve tablo PARTITION 2PartitionTable aynı dosya grubunda bölümlenmemiş bir tablo oluşturulur. Tablo PARTITION 2PartitionTable verileri NonPartitionTabletabloya geçirilir.
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
D. Bölümlenmiş tablolarda kilit yükseltmesine izin ver
Aşağıdaki örnek, kilit yükseltmesini bölümlenmiş bir tablodaki bölüm düzeyine etkinleştirir. Tablo bölümlenmemişse, kilit yükseltme düzeyi TABLE ayarlanır.
Applies to: SQL Server ve Azure SQL Veritabanı.
ALTER TABLE dbo.T1 SET (LOCK_ESCALATION = AUTO);
GO
E. Tabloda değişiklik izlemeyi yapılandırma
Aşağıdaki örnek, Person.Person tablosunda değişiklik izlemeyi etkinleştirir.
Applies to: SQL Server ve Azure SQL Veritabanı.
USE AdventureWorks2022;
ALTER TABLE Person.Person ENABLE CHANGE_TRACKING;
Aşağıdaki örnek, değişiklik izlemeyi etkinleştirir ve değişiklik sırasında güncelleştirilen sütunların izlenmesini etkinleştirir.
Applies to: SQL Server.
USE AdventureWorks2022;
GO
ALTER TABLE Person.Person ENABLE CHANGE_TRACKING
WITH (TRACK_COLUMNS_UPDATED = ON);
Aşağıdaki örnek, Person.Person tablosunda değişiklik izlemeyi devre dışı bırakır.
Applies to: SQL Server ve Azure SQL Veritabanı.
USE AdventureWorks2022;
GO
ALTER TABLE Person.Person DISABLE CHANGE_TRACKING;
Kısıtlamaları ve tetikleyicileri devre dışı bırakma ve etkinleştirme
A. Kısıtlamayı devre dışı bırakma ve yeniden etkinleştirme
Aşağıdaki örnek, verilerde kabul edilen ücretleri sınırlayan bir kısıtlamayı devre dışı bırakır. Kısıtlamayı devre dışı bırakmak ve genellikle kısıtlamayı ihlal edecek bir eklemeye izin vermek için ile ALTER TABLE kullanınNOCHECK CONSTRAINT. Kısıtlamayı yeniden etkinleştirmek için kullanın CHECK CONSTRAINT .
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 fails.
ALTER TABLE dbo.cnst_example CHECK CONSTRAINT salary_cap;
INSERT INTO dbo.cnst_example VALUES (4, 'Eric James', 110000);
B. Tetikleyiciyi devre dışı bırakma ve yeniden etkinleştirme
Aşağıdaki örnek, tetikleyiciyi DISABLE TRIGGER devre dışı bırakmak ve genellikle tetikleyiciyi ihlal edecek bir eklemeye izin vermek için seçeneğini ALTER TABLE kullanır. Tetikleyiciyi yeniden etkinleştirmek için kullanın ENABLE TRIGGER .
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;
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
Çevrimiçi işlemler
A. Düşük öncelikli bekleme seçeneklerini kullanarak çevrimiçi dizin yeniden oluşturma
Aşağıdaki örnek, düşük öncelikli bekleme seçeneklerini belirterek çevrimiçi dizin yeniden oluşturma işleminin nasıl gerçekleştirileceğini gösterir.
Applies to: SQL Server 2014 (12.x) ve sonraki sürümleri ve Azure SQL Veritabanı.
ALTER TABLE T1 REBUILD WITH (
PAD_INDEX = ON,
ONLINE = ON (
WAIT_AT_LOW_PRIORITY (MAX_DURATION = 4 MINUTES, ABORT_AFTER_WAIT = BLOCKERS)
)
);
B. Çevrimiçi alter sütunu
Aşağıdaki örnekte, seçeneğiyle sütun değiştirme işleminin nasıl çalıştırılacakları gösterilmektedir ONLINE .
Applies to: SQL Server 2016 (13.x) ve sonraki sürümleri ve Azure SQL Veritabanı.
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) WITH (ONLINE = ON);
GO
EXECUTE sp_help doc_exy;
DROP TABLE dbo.doc_exy;
GO
Sistem sürümü oluşturma
Aşağıdaki dört örnek, sistem sürümü oluşturma kullanma söz dizimini tanımanıza yardımcı olur. Ek yardım için bkz. Sistem sürümüne sahip zamana bağlı tabloları kullanmaya başlama.
Applies to: SQL Server 2016 (13.x) ve sonraki sürümleri ve Azure SQL Veritabanı.
A. Mevcut tablolara sistem sürümü oluşturma ekleme
Aşağıdaki örnekte, mevcut bir tabloya sistem sürümü oluşturmanın nasıl ekleneceği ve gelecekteki bir geçmiş tablosunun nasıl oluşturulacağı gösterilmektedir. Bu örnekte, birincil anahtar tanımlanmış InsurancePolicy adlı bir tablo olduğu varsayılır. Bu örnek, sistem sürümü oluşturma için yeni oluşturulan dönem sütunlarını başlangıç ve bitiş saatlerinin varsayılan değerlerini kullanarak doldurur çünkü bu değerler null olamaz. Bu örnekte, geçerli tabloyla etkileşim kuran mevcut uygulamalar üzerinde hiçbir etki olmadığından emin olmak için yan tümcesi kullanılır HIDDEN . Ayrıca yalnızca SQL Veritabanı'nda kullanılabilenleri kullanır HISTORY_RETENTION_PERIOD .
--Alter non-temporal table to define periods for system versioning
ALTER TABLE InsurancePolicy
ADD ValidFrom DATETIME2 GENERATED ALWAYS AS ROW START HIDDEN
DEFAULT SYSUTCDATETIME() NOT NULL,
ValidTo DATETIME2 GENERATED ALWAYS AS ROW END HIDDEN
DEFAULT CONVERT (DATETIME2, '9999-12-31 23:59:59.99999999') NOT NULL,
PERIOD FOR SYSTEM_TIME (ValidFrom, ValidTo);
--Enable system versioning with 1 year retention for historical data
ALTER TABLE InsurancePolicy SET (
SYSTEM_VERSIONING = ON (
HISTORY_RETENTION_PERIOD=1 YEAR
)
);
B. Sistem sürümü oluşturma özelliğini kullanmak için mevcut çözümü geçirme
Aşağıdaki örnekte, zamansal desteği taklit etmek için tetikleyicileri kullanan bir çözümden sistem sürümü oluşturma işlemine nasıl geçilmesi gösterilmektedir. Örnekte, mevcut çözümü için bir ProjectTask tablo ve ProjectTaskHistory tablo kullanan, dönemleri için ve Changed Date sütunlarını kullananRevised Date, bu dönem sütunlarının datetime2 veri türünü kullanmadığı ve tablonun tanımlanmış bir birincil anahtarı olduğu ProjectTask varsayılır.
-- Drop existing trigger
DROP TRIGGER ProjectTask_HistoryTrigger;
-- Adjust the schema for current and history table
-- Change data types for existing period columns
ALTER TABLE ProjectTask ALTER COLUMN [Changed Date] DATETIME2 NOT NULL;
ALTER TABLE ProjectTask ALTER COLUMN [Revised Date] DATETIME2 NOT NULL;
ALTER TABLE ProjectTaskHistory ALTER COLUMN [Changed Date] DATETIME2 NOT NULL;
ALTER TABLE ProjectTaskHistory ALTER COLUMN [Revised Date] DATETIME2 NOT NULL;
-- Add SYSTEM_TIME period and set system versioning with linking two existing tables
-- (a certain set of data checks happen in the background)
ALTER TABLE ProjectTask
ADD PERIOD FOR SYSTEM_TIME ([Changed Date], [Revised Date]);
ALTER TABLE ProjectTask SET (
SYSTEM_VERSIONING = ON (
HISTORY_TABLE=dbo.ProjectTaskHistory, DATA_CONSISTENCY_CHECK=ON
)
);
C. Tablo şemasını değiştirmek için sistem sürümü oluşturmayı devre dışı bırakma ve yeniden etkinleştirme
Bu örnekte, Department tablosunda sistem sürümü oluşturmayı devre dışı bırakma, sütun ekleme ve sistem sürümü oluşturmayı yeniden etkinleştirme gösterilmektedir. Tablo şemasını değiştirmek için sistem sürümü oluşturmayı devre dışı bırakmak gerekir. DBA'nın sistem sürümünü yeniden etkinleştirirken veri tutarlılığı denetimini atlamasını ve bir performans avantajı elde etmesini sağlayan tablo şemasını güncelleştirirken her iki tabloda da güncelleştirme yapılmasını önlemek için bu adımları bir işlem içinde gerçekleştirin. İstatistik oluşturma, bölümler arasında geçiş yapma veya tablolardan birine veya her iki tabloya sıkıştırma uygulama gibi görevler için sistem sürümü oluşturmanın devre dışı bırakılması gerekmez.
BEGIN TRAN
/* Takes schema lock on both tables */
ALTER TABLE Department
SET (SYSTEM_VERSIONING = OFF) ;
/* expand table schema for temporal table */
ALTER TABLE Department
ADD Col5 int NOT NULL DEFAULT 0 ;
/* Expand table schema for history table */
ALTER TABLE DepartmentHistory
ADD Col5 int NOT NULL DEFAULT 0 ;
/* Re-establish versioning again*/
ALTER TABLE Department
SET (SYSTEM_VERSIONING = ON (HISTORY_TABLE=dbo.DepartmentHistory,
DATA_CONSISTENCY_CHECK = OFF)) ;
COMMIT
D. Sistem sürümünü kaldırma
Bu örnekte, Department tablosundan sistem sürümü oluşturmanın nasıl tamamen kaldırılacağı ve DepartmentHistory tablosunun nasıl bırakılacağı gösterilmektedir. İsteğe bağlı olarak, sistem sürüm oluşturma bilgilerini kaydetmek için sistem tarafından kullanılan dönem sütunlarını da bırakmak isteyebilirsiniz. Sistem sürümü oluşturma etkinken Department veya DepartmentHistory tablolarını bırakamazsınız.
ALTER TABLE Department
SET (SYSTEM_VERSIONING = OFF);
ALTER TABLE Department
DROP PERIOD FOR SYSTEM_TIME;
DROP TABLE DepartmentHistory;
Örnekler: Azure Synapse Analytics ve Analiz Platformu Sistemi (PDW)
Aşağıdaki A-C örnekleri, FactResellerSales veritabanındaki tablosunu kullanır.
A. Tablonun bölümlenip bölümlenmediğini belirleme
Tablo FactResellerSales bölümlenmişse aşağıdaki sorgu bir veya daha fazla satır döndürür. Tablo bölümlenmemişse, sorgu satır döndürmez.
SELECT *
FROM sys.partitions AS p
INNER JOIN sys.tables AS t
ON p.object_id = t.object_id
WHERE p.partition_id IS NOT NULL
AND t.name = 'FactResellerSales';
B. Bölümlenmiş tablo için sınır değerlerini belirleme
Aşağıdaki sorgu, FactResellerSales tablosundaki her bölüm için sınır değerlerini döndürür.
SELECT t.name AS TableName,
i.name AS IndexName,
p.partition_number,
p.partition_id,
i.data_space_id,
f.function_id,
f.type_desc,
r.boundary_id,
r.value AS BoundaryValue
FROM sys.tables AS t
INNER JOIN sys.indexes AS i
ON t.object_id = i.object_id
INNER JOIN sys.partitions AS p
ON i.object_id = p.object_id
AND i.index_id = p.index_id
INNER JOIN sys.partition_schemes AS s
ON i.data_space_id = s.data_space_id
INNER JOIN sys.partition_functions AS f
ON s.function_id = f.function_id
LEFT OUTER JOIN sys.partition_range_values AS r
ON f.function_id = r.function_id
AND r.boundary_id = p.partition_number
WHERE t.name = 'FactResellerSales'
AND i.type <= 1
ORDER BY p.partition_number;
C. Bölümlenmiş tablo için bölüm sütununu belirleme
Aşağıdaki sorgu, tablo için bölümleme sütununun FactResellerSales adını döndürür.
SELECT t.object_id AS Object_ID,
t.name AS TableName,
ic.column_id AS PartitioningColumnID,
c.name AS PartitioningColumnName
FROM sys.tables AS t
INNER JOIN sys.indexes AS i
ON t.object_id = i.object_id
INNER JOIN sys.columns AS c
ON t.object_id = c.object_id
INNER JOIN sys.partition_schemes AS ps
ON ps.data_space_id = i.data_space_id
INNER JOIN sys.index_columns AS ic
ON ic.object_id = i.object_id
AND ic.index_id = i.index_id
AND ic.partition_ordinal > 0
WHERE t.name = 'FactResellerSales'
AND i.type <= 1
AND c.column_id = ic.column_id;
D. İki bölümü birleştirme
Aşağıdaki örnek, bir tablodaki iki bölümü birleştirir.
Customer tablosu aşağıdaki tanıma sahiptir:
CREATE TABLE Customer
(
id INT NOT NULL,
lastName VARCHAR (20),
orderCount INT,
orderDate DATE
)
WITH (
DISTRIBUTION = HASH(id),
PARTITION(orderCount RANGE LEFT
FOR VALUES (1, 5, 10, 25, 50, 100)
)
);
Aşağıdaki komut 10 ve 25 bölüm sınırlarını birleştirir.
ALTER TABLE Customer MERGE RANGE (10);
Tablo için yeni DDL şöyledir:
CREATE TABLE Customer
(
id INT NOT NULL,
lastName VARCHAR (20),
orderCount INT,
orderDate DATE
)
WITH (
DISTRIBUTION = HASH(id),
PARTITION(orderCount RANGE LEFT
FOR VALUES (1, 5, 25, 50, 100)
)
);
E. Bölümü bölme
Aşağıdaki örnek, bir tablodaki bölümü böler.
Customer tablosunda aşağıdaki DDL vardır:
DROP TABLE Customer;
CREATE TABLE Customer
(
id INT NOT NULL,
lastName VARCHAR (20),
orderCount INT,
orderDate DATE
)
WITH (
DISTRIBUTION = HASH(id),
PARTITION(orderCount RANGE LEFT
FOR VALUES (1, 5, 10, 25, 50, 100)
)
);
Aşağıdaki komut, 50 ile 100 arasında 75 değerine bağlı yeni bir bölüm oluşturur.
ALTER TABLE Customer SPLIT RANGE (75);
Tablo için yeni DDL şöyledir:
CREATE TABLE Customer (
id INT NOT NULL,
lastName VARCHAR(20),
orderCount INT,
orderDate DATE)
WITH DISTRIBUTION = HASH(id),
PARTITION ( orderCount (RANGE LEFT
FOR VALUES (1, 5, 10, 25, 50, 75, 100))) ;
F. Bölümü geçmiş tablosuna taşımak için SWITCH kullanma
Aşağıdaki örnek, Orders tablosunun bir bölümündeki verileri OrdersHistory tablosundaki bir bölüme taşır.
Orders tablosunda aşağıdaki DDL vardır:
CREATE TABLE Orders
(
id INT,
city VARCHAR (25),
lastUpdateDate DATE,
orderDate DATE
)
WITH (
DISTRIBUTION = HASH(id),
PARTITION(orderDate RANGE RIGHT
FOR VALUES ('2004-01-01', '2005-01-01', '2006-01-01', '2007-01-01')
)
);
Bu örnekte, Orders tablosunda aşağıdaki bölümler bulunur. Her bölüm veri içerir.
| Partition | Veri var mı? | Sınır aralığı |
|---|---|---|
1 |
Yes | OrderDate < '2004-01-01' |
2 |
Yes | '2004-01-01' <= OrderDate < '2005-01-01' |
3 |
Yes | '2005-01-01' <= OrderDate< '2006-01-01' |
4 |
Yes | '2006-01-01'<= OrderDate < '2007-01-01' |
5 |
Yes | '2007-01-01' <= OrderDate |
- Bölüm 1 (veri var):
OrderDate < '2004-01-01' - Bölüm 2 (veri var):
'2004-01-01' <= OrderDate < '2005-01-01' - Bölüm 3 (veri var):
'2005-01-01' <= OrderDate< '2006-01-01' - Bölüm 4 (veri var):
'2006-01-01'<= OrderDate < '2007-01-01' - Bölüm 5 (veri var):
'2007-01-01' <= OrderDate
OrdersHistory tablosunda, Orders tablosuyla aynı sütunlara ve sütun adlara sahip aşağıdaki DDL bulunur. Her ikisi de id sütununda karma olarak dağıtılır.
CREATE TABLE OrdersHistory
(
id INT,
city VARCHAR (25),
lastUpdateDate DATE,
orderDate DATE
)
WITH (
DISTRIBUTION = HASH(id),
PARTITION(orderDate RANGE RIGHT
FOR VALUES ('2004-01-01')
)
);
Sütun ve sütun adlarının aynı olması gerekse de bölüm sınırlarının aynı olması gerekmez. Bu örnekte, OrdersHistory tablosunda aşağıdaki iki bölüm vardır ve her iki bölüm de boş olur:
- Bölüm 1 (veri yok):
OrderDate < '2004-01-01' - Bölüm 2 (boş):
'2004-01-01' <= OrderDate
Önceki iki tablo için aşağıdaki komut, OrderDate < '2004-01-01' tablosundan Orders tablosuna OrdersHistory olan tüm satırları taşır.
ALTER TABLE Orders SWITCH PARTITION 1 TO OrdersHistory PARTITION 1;
Sonuç olarak, Orders içindeki ilk bölüm boş olur ve OrdersHistory'daki ilk bölüm veri içerir. Tablolar artık aşağıdaki gibi görünür:
Orders tablosu
- Bölüm 1 (boş):
OrderDate < '2004-01-01' - Bölüm 2 (veri var):
'2004-01-01' <= OrderDate < '2005-01-01' - Bölüm 3 (veri var):
'2005-01-01' <= OrderDate< '2006-01-01' - Bölüm 4 (veri var):
'2006-01-01'<= OrderDate < '2007-01-01' - Bölüm 5 (veri var):
'2007-01-01' <= OrderDate
OrdersHistory tablosu
- Bölüm 1 (veri var):
OrderDate < '2004-01-01' - Bölüm 2 (boş):
'2004-01-01' <= OrderDate
Tabloyu temizlemek Orders için, bölümleri birleştirerek ve 1 aşağıdaki gibi boş bölümü 2 kaldırabilirsiniz:
ALTER TABLE Orders MERGE RANGE ('2004-01-01');
Birleştirme işleminden sonra Orders tablosunda aşağıdaki bölümler yer alır:
Orders tablosu
- Bölüm 1 (veri var):
OrderDate < '2005-01-01' - Bölüm 2 (veri var):
'2005-01-01' <= OrderDate< '2006-01-01' - Bölüm 3 (veri var):
'2006-01-01'<= OrderDate < '2007-01-01' - Bölüm 4 (veri var):
'2007-01-01' <= OrderDate
Bir yıl daha geçtiğini ve 2005 yılını arşivlemeye hazır olduğunuzu varsayalım. Boş bölümü aşağıdaki gibi bölerek OrdersHistory tablosunda 2005 yılı için boş bir bölüm ayırabilirsiniz:
ALTER TABLE OrdersHistory SPLIT RANGE ('2005-01-01');
Bölmeden sonra OrdersHistory tablosunda aşağıdaki bölümler vardır:
OrdersHistory tablosu
- Bölüm 1 (veri var):
OrderDate < '2004-01-01' - Bölüm 2 (boş):
'2004-01-01' < '2005-01-01' - Bölüm 3 (boş):
'2005-01-01' <= OrderDate
İlgili içerik
- sys.tables
- sp_rename
- sp_help
- EVENTDATA (Transact-SQL)
- CREATE TABLE (Transact-SQL)
- DROP TABLE (Transact-SQL)
- ALTER TABLE column_constraint (Transact-SQL)
- ALTER TABLE column_definition (Transact-SQL)
- ALTER TABLE computed_column_definition (Transact-SQL)
- ALTER TABLE index_option (Transact-SQL)
- ALTER TABLE table_constraint (Transact-SQL)