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 VeritabanıAzure SQL Yönetilen ÖrneğiSQL database in Microsoft Fabric

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

Remarks

Zaman tablosunun şemasını değiştirmek için güncel ve geçmiş tablolarında izin almanız gerekir CONTROL .

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

Database Engine, değişiklik türüne bağlı olarak şema değişikliğini geçmiş tablosuna iletir.

varchar(max), nvarchar(max), varbinary(max) veya xml sütunlarının varsayılan olarak eklenmesi, SQL Server'ın tüm sürümlerinde veri güncelleme işlemidir.

Bir sütun ekledikten sonra satır boyutu sınırını aşarsa, çevrimiçi yeni sütun ekleyemezsiniz.

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 işlemi, ONLINE seçeneği için hangi değeri belirtirseniz belirtin, çevrimiçi olarak çalışmaz.

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
  • Bir SPARSE sütunu eklemek veya mevcut bir sütunu SPARSE olarak değiştirmek; geçmiş tablosu, geçmiş tablosu için varsayılan ayar olan DATA_COMPRESSION = PAGE ya da DATA_COMPRESSION = ROW olarak ayarlandığında.
  • COLUMN_SET ekleme
  • Bir ROWGUIDCOL sütun ekleme veya mevcut bir sütunu ROWGUIDCOL olarak 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

İşte zaman tablosunun şemasını değiştiren bazı örnekler.

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

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

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 örnek, hala ayarlamanız SYSTEM_VERSIONING = OFF gerektiğinde şemayı nasıl değiştireceğinizi (örneğin bir IDENTITY sütun eklemek) gösterir. Bu örnek, veri tutarlılığı denetimini devre dışı bırakır. Bu kontrol bir işlem içinde şema değişikliği yaptığınızda gereksizdir, çünkü eşzamanlı veri değişiklikleri olmaz.

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
        CONSTRAINT DF_Cntr DEFAULT 0 NOT NULL;

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

COMMIT TRANSACTION;