Bagikan melalui


Mengubah skema tabel temporal versi sistem

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

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

Contoh

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.mycompany.com';

ALTER TABLE dbo.Department
    ADD TempColumn INT;

GO

ALTER TABLE dbo.Department
    DROP COLUMN TempColumn;

/* Setting IsHidden property for period columns.
Use ALTER COLUMN <period_column> DROP HIDDEN to clear IsHidden flag */

ALTER TABLE dbo.Department
    ALTER COLUMN ValidFrom ADD HIDDEN;

ALTER TABLE dbo.Department
    ALTER COLUMN ValidTo ADD HIDDEN;

Keterangan yang penting

  • Izin CONTROL 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 akan menjadi 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 NOT NULL baru, pertimbangkan untuk menghilangkan batasan default pada tabel riwayat karena semua kolom dalam tabel tersebut secara otomatis diisi oleh sistem.

  • Opsi online (WITH (ONLINE = ON) tidak berpengaruh pada ALTER TABLE ALTER COLUMN tabel temporal versi sistem. ALTER column tidak dilakukan sebagai online, terlepas dari nilai mana yang ditentukan untuk opsi ONLINE.

  • 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
    • Menambahkan kolom IDENTITY
    • Menambahkan kolom SPARSE 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
    • Menambahkan kolom ROWGUIDCOL atau mengubah kolom yang sudah ada menjadi ROWGUIDCOL
    • Mengubah kolom NULL ke NOT NULL jika kolom berisi nilai null dalam tabel saat ini atau riwayat

Contoh berikut menunjukkan perubahan skema di mana pengaturan SYSTEM_VERSIONING = OFF masih diperlukan (menambahkan kolom IDENTITY ). 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;

Langkah berikutnya