Aracılığıyla paylaş


Sistem sürümüne sahip bir zamana bağlı tablonun şemasını değiştirme

Şunlar için geçerlidir: SQL Server 2016 (13.x) ve sonraki sürümler Azure SQL DatabaseAzure SQL Managed InstanceSQL database in Microsoft Fabric

Sütun eklemek, değiştirmek veya kaldırmak için ALTER TABLE deyimini kullanın.

Remarks

Geçerli ve geçmiş tablolarında CONTROL izni, zamansal tablonun şemasını değiştirmek için gereklidir.

Bir ALTER TABLE işlemi sırasında sistem her iki tabloda da şema kilidi tutar.

Belirtilen şema değişikliği, geçmiş tablosuna uygun şekilde yayılır (değişikliğin türüne bağlı olarak).

varchar(max), nvarchar(max), varbinary(max) veya XML sütunlarını varsayılan olarak eklemek, SQL Server'ın tüm sürümlerinde bir güncelleştirme verisi işlemidir.

Sütun eklemeden sonra satır boyutu satır boyutu sınırını aşarsa, yeni sütunlar çevrimiçi eklenemez.

Tabloyu yeni bir NOT NULL sütunuyla genişlettikten sonra, sistem bu tablodaki tüm sütunları otomatik olarak doldurduğundan, geçmiş tablosundaki varsayılan kısıtlamayı düşürmeyi düşünebilirsiniz.

Çevrimiçi seçeneğin (WITH (ONLINE = ON) zamansal tablolarla ALTER TABLE ALTER COLUMN üzerinde hiçbir etkisi yoktur. ALTER sütun, ONLINE seçeneği için hangi değerin belirtildiğinden bağımsız olarak çevrimiçi olarak gerçekleştirilmez.

Dönem sütunlarının ALTER COLUMN özelliğini değiştirmek için IsHidden kullanabilirsiniz.

Aşağıdaki şema değişiklikleri için doğrudan ALTER kullanamazsınız. Bu tür değişiklikler için SYSTEM_VERSIONING = OFFayarlayın.

  • Hesaplanan sütun ekleme
  • IDENTITY sütunu ekleme
  • Geçmiş tablosu SPARSE veya SPARSEolarak ayarlandığında DATA_COMPRESSION = PAGE sütun ekleme veya var olan sütunu DATA_COMPRESSION = ROW olacak şekilde değiştirme, geçmiş tablosunun varsayılanıdır.
  • COLUMN_SET ekleme
  • ROWGUIDCOL sütunu ekleme veya var olan sütunu ROWGUIDCOL olacak şekilde değiştirme
  • Geçerli veya geçmiş tablosunda sütun null değerler içeriyorsa, NULL sütunu NOT NULL olarak değiştirilecektir.

Examples

A. Zamana bağlı tablonun şemasını değiştirme

Zamansal tablonun şemasını değiştiren bazı örnekler aşağıda verilmiştir.

ALTER TABLE dbo.Department
    ALTER COLUMN DeptName varchar(100);

ALTER TABLE dbo.Department
    ADD WebAddress nvarchar(255) NOT NULL
    CONSTRAINT DF_WebAddress DEFAULT 'www.example.com';

ALTER TABLE dbo.Department
    ADD TempColumn INT;
GO

ALTER TABLE dbo.Department
    DROP COLUMN TempColumn;

B. HIDDEN bayrağını kullanarak dönem sütunları ekle

ALTER TABLE dbo.Department
    ALTER COLUMN ValidFrom ADD HIDDEN;

ALTER TABLE dbo.Department
    ALTER COLUMN ValidTo ADD HIDDEN;

Dönem sütunundaki gizli bayrağı kaldırmak için ALTER COLUMN <period_column> DROP HIDDEN kullanabilirsiniz.

C. SYSTEM_VERSIONING off olarak ayarlanmış şemayı değiştirme

Aşağıdaki örnekte, SYSTEM_VERSIONING = OFF ayarının hala gerekli olduğu şemanın değiştirilmesi (IDENTITY sütun ekleme) gösterilmektedir. Bu örnek, veri tutarlılığı denetimini devre dışı bırakır. Eşzamanlı veri değişikliği yapılamayabileceği için şema değişikliği bir işlem içinde yapıldığında bu denetim gereksizdir.

BEGIN TRANSACTION

ALTER TABLE [dbo].[CompanyLocation] SET (SYSTEM_VERSIONING = OFF);
ALTER TABLE [CompanyLocation] ADD Cntr INT IDENTITY (1, 1);

ALTER TABLE [dbo].[CompanyLocationHistory]
    ADD Cntr INT NOT NULL
    CONSTRAINT DF_Cntr DEFAULT 0;

ALTER TABLE [dbo].[CompanyLocation] SET
(
    SYSTEM_VERSIONING = ON
    (HISTORY_TABLE = [dbo].[CompanyLocationHistory])
);

COMMIT;