Mengubah skema tabel temporal versi sistem

Berlaku untuk: SQL Server 2016 (13.x) dan versi yang lebih baru Azure SQL DatabaseAzure SQL Managed InstanceDatabase SQL di Microsoft Fabric

ALTER TABLE Gunakan pernyataan untuk menambahkan, mengubah, atau menghapus kolom.

Remarks

Anda memerlukan CONTROL izin pada tabel saat ini dan riwayat untuk mengubah skema tabel temporal.

ALTER TABLE Selama operasi, sistem memegang kunci skema pada kedua tabel.

Database Engine menyebarkan perubahan skema ke tabel riwayat, tergantung pada jenis perubahan.

Menambahkan kolom varchar(max), nvarchar(max), varbinary(max), atau xml dengan nilai default merupakan operasi pembaruan data pada semua edisi SQL Server.

Jika ukuran baris setelah menambahkan kolom melebihi batas ukuran baris, Anda tidak dapat menambahkan kolom baru secara online.

Setelah Anda memperluas tabel dengan kolom baru NOT NULL , pertimbangkan untuk menghilangkan batasan default pada tabel riwayat, karena sistem secara otomatis mengisi semua kolom dalam tabel tersebut.

Opsi online (WITH (ONLINE = ON) tidak berpengaruh pada ALTER TABLE ALTER COLUMN dengan tabel temporal. Operasi kolom ALTER tidak berjalan secara online, apa pun nilai yang Anda tentukan untuk opsi ONLINE.

Anda dapat menggunakan ALTER COLUMN untuk mengubah properti IsHidden untuk kolom periode.

Anda tidak dapat menggunakan langsung ALTER untuk perubahan skema berikut. Untuk jenis perubahan ini, atur SYSTEM_VERSIONING = OFF.

  • Menambahkan kolom komputasi
  • IDENTITY Menambahkan kolom
  • Menambahkan SPARSE kolom atau mengubah kolom yang sudah ada menjadi SPARSE ketika tabel riwayat diatur ke DATA_COMPRESSION = PAGE atau DATA_COMPRESSION = ROW, yang merupakan default untuk tabel riwayat.
  • Menambahkan COLUMN_SET
  • Menambahkan kolom ROWGUIDCOL atau mengubah kolom yang sudah ada menjadi ROWGUIDCOL
  • Mengubah kolom menjadi NULLNOT NULL jika kolom berisi nilai null dalam tabel saat ini atau riwayat

Examples

A. Mengubah skema tabel temporal

Berikut beberapa contoh yang mengubah skema tabel temporal.

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. Menambahkan kolom periode menggunakan tag TERSEMBUNYI

ALTER TABLE dbo.Department
    ALTER COLUMN ValidFrom ADD HIDDEN;

ALTER TABLE dbo.Department
    ALTER COLUMN ValidTo ADD HIDDEN;

Anda dapat menggunakan ALTER COLUMN <period_column> DROP HIDDEN untuk menghapus penanda tersembunyi pada kolom periode.

C. Mengubah skema dengan SYSTEM_VERSIONING diatur ke NONAKTIF

Contoh berikut menunjukkan cara mengubah skema saat Anda masih perlu mengatur SYSTEM_VERSIONING = OFF (menambahkan IDENTITY kolom). Contoh ini menonaktifkan pemeriksaan konsistensi data. Pemeriksaan ini tidak diperlukan saat Anda melakukan perubahan skema dalam transaksi, karena tidak ada perubahan data yang dapat terjadi secara bersamaan.

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;