Zmienianie schematu tabeli czasowej w wersji systemowej
Dotyczy: SQL Server 2016 (13.x) i nowsze wersje
Azure SQL Database
Azure SQL Managed Instance
SQL Database w usłudze Microsoft Fabric
Użyj instrukcji ALTER TABLE
, aby dodać, zmienić lub usunąć kolumnę.
Uwagi
CONTROL
uprawnienia do tabel bieżących i historycznych są wymagane do zmiany schematu tabeli czasowej.
Podczas operacji ALTER TABLE
system posiada blokadę schematu na obu tabelach.
Określona zmiana schematu jest odpowiednio propagowana do tabeli historii (w zależności od typu zmiany).
Dodawanie varchar(max), nvarchar(max), varbinary(max) lub kolumn XML z wartościami domyślnymi, to operacja aktualizacji danych we wszystkich wersjach programu SQL Server.
Jeśli rozmiar wiersza po dodaniu kolumny przekracza limit rozmiaru wiersza, nie można dodać nowych kolumn w trybie online.
Po rozszerzeniu tabeli przy użyciu nowej kolumny NOT NULL
rozważ usunięcie domyślnego ograniczenia w tabeli historii, ponieważ system automatycznie wypełnia wszystkie kolumny w tej tabeli.
Opcja online (WITH (ONLINE = ON
) nie ma wpływu na ALTER TABLE ALTER COLUMN
z tabelami czasowymi.
ALTER
kolumna nie działa jako online, niezależnie od tego, która wartość została określona dla opcji ONLINE
.
Możesz użyć ALTER COLUMN
, aby zmienić właściwość IsHidden
dla kolumn okresowych.
Nie można użyć ALTER
bezpośrednio dla następujących zmian schematu. W przypadku tych typów zmian ustaw SYSTEM_VERSIONING = OFF
.
- Dodawanie obliczonej kolumny
- Dodawanie kolumny
IDENTITY
- Dodanie kolumny
SPARSE
lub zmiana istniejącej kolumny naSPARSE
, gdy tabela historii jest ustawiona naDATA_COMPRESSION = PAGE
lubDATA_COMPRESSION = ROW
, która jest domyślną wartością tabeli historii. - Dodawanie
COLUMN_SET
- Dodawanie kolumny
ROWGUIDCOL
lub zmienianie istniejącej kolumny naROWGUIDCOL
- Zmiana kolumny
NULL
naNOT NULL
, jeśli kolumna zawiera wartości null w tabeli bieżącej lub historii
Przykłady
A. Zmienianie schematu tabeli czasowej
Oto kilka przykładów, które zmieniają schemat tabeli czasowej.
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. Dodaj kolumny okresu przy użyciu flagi HIDDEN
ALTER TABLE dbo.Department
ALTER COLUMN ValidFrom ADD HIDDEN;
ALTER TABLE dbo.Department
ALTER COLUMN ValidTo ADD HIDDEN;
Możesz użyć ALTER COLUMN <period_column> DROP HIDDEN
, aby wyczyścić ukrytą flagę w kolumnie okresu.
C. Zmienianie schematu z wyłączoną opcją SYSTEM_VERSIONING.
W poniższym przykładzie pokazano zmianę schematu, w którym ustawienie SYSTEM_VERSIONING = OFF
jest nadal wymagane (dodanie kolumny IDENTITY
). W tym przykładzie wyłączono sprawdzanie spójności danych. Ta kontrola jest niepotrzebna, gdy zmiana schematu jest wprowadzana w ramach transakcji, ponieważ nie mogą wystąpić żadne współbieżne zmiany danych.
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;
Powiązana zawartość
- Tabele Czasowe
- Rozpoczynanie pracy z tabelami czasowymi w wersji systemowej
- Zarządzanie przechowywaniem danych historycznych w systemowowersjonowanych tabelach tymczasowych
- Systemowe wersje tabel czasowych z tabelami zoptymalizowanymi do pracy w pamięci
- ZMIEN TABELĘ (Transact-SQL)
- Tworzenie tabeli czasowej w wersji systemowej
- Modyfikowanie danych w tabeli czasowej w wersji systemowej
- Wykonywanie zapytań dotyczących danych w tabeli czasowej w wersji systemowej
- Zatrzymaj wersjonowanie systemowe w wersjonowanej systemowo tabeli czasowej