Bagikan melalui


Mengubah skema tabel temporal versi sistem

Berlaku untuk: SQL Server 2016 (13.x) dan Azure SQL Database Azure SQL Managed Instance yang lebih baru

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

Keterangan

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

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

Perubahan skema yang ditentukan disebarkan ke tabel riwayat dengan tepat (tergantung pada jenis perubahan).

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

Jika ukuran baris setelah penambahan kolom melebihi batas ukuran baris, kolom baru tidak dapat ditambahkan 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. ALTER kolom tidak dilakukan sebagai online, terlepas dari nilai mana yang ditentukan untuk ONLINE opsi.

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

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

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

Contoh

J. Mengubah skema tabel temporal

Berikut adalah beberapa contoh yang mengubah skema tabel temporal.

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. Menambahkan kolom titik menggunakan bendera 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 bendera tersembunyi pada kolom titik.

C. Mengubah skema dengan SYSTEM_VERSIONING diatur ke NONAKTIF

Contoh berikut menunjukkan perubahan skema di mana pengaturan SYSTEM_VERSIONING = OFF masih diperlukan (menambahkan IDENTITY kolom). Contoh ini menonaktifkan pemeriksaan konsistensi data. Pemeriksaan ini tidak perlu ketika perubahan skema dilakukan dalam transaksi karena tidak ada perubahan data bersamaan yang dapat terjadi.

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;