Ändra schemat för en systemversionsbaserad temporal tabell
gäller för: SQL Server 2016 (13.x) och senare versioner
Azure SQL Database
Azure SQL Managed Instance
SQL-databas i Microsoft Fabric
Använd instruktionen ALTER TABLE
för att lägga till, ändra eller ta bort en kolumn.
Anmärkningar
CONTROL
behörighet för aktuella tabeller och historiktabeller krävs för att ändra schemat för tidstabellen.
Under en ALTER TABLE
åtgärd har systemet ett schemalås på båda tabellerna.
Den angivna schemaändringen sprids till historiktabellen på rätt sätt (beroende på typ av ändring).
Att lägga till varchar(max), nvarchar(max), varbinary(max) eller XML-kolumner med standardvärden, är en uppdateringsdataåtgärd för alla utgåvor av SQL Server.
Om radstorleken efter kolumntillägget överskrider radstorleksgränsen kan nya kolumner inte läggas till online.
När du utökar en tabell med en ny NOT NULL
kolumn bör du överväga att ta bort standardvillkoret för historiktabellen, eftersom systemet automatiskt fyller i alla kolumner i tabellen.
Onlinealternativet (WITH (ONLINE = ON
) har ingen effekt på ALTER TABLE ALTER COLUMN
med temporala tabeller.
ALTER
kolumnen utförs inte som online, oavsett vilket värde som har angetts för ONLINE
alternativet.
Du kan använda ALTER COLUMN
för att ändra egenskapen IsHidden
för periodkolumner.
Du kan inte använda direkt ALTER
för följande schemaändringar. För dessa typer av ändringar anger du SYSTEM_VERSIONING = OFF
.
- Lägga till en beräknad kolumn
- Lägga till en
IDENTITY
kolumn - Lägga till en
SPARSE
kolumn eller ändra befintlig kolumn så att denSPARSE
när historiktabellen är inställd påDATA_COMPRESSION = PAGE
ellerDATA_COMPRESSION = ROW
, vilket är standardvärdet för historiktabellen. - Lägga till en
COLUMN_SET
- Lägga till en
ROWGUIDCOL
kolumn eller ändra befintlig kolumn tillROWGUIDCOL
- Ändra en
NULL
kolumn tillNOT NULL
om kolumnen innehåller null-värden i den aktuella tabellen eller historiktabellen
Exempel
A. Ändra schemat för en temporal tabell
Här är några exempel som ändrar schemat för temporaltabellen.
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. Lägg till periodkolumner med hjälp av flaggan HIDDEN
ALTER TABLE dbo.Department
ALTER COLUMN ValidFrom ADD HIDDEN;
ALTER TABLE dbo.Department
ALTER COLUMN ValidTo ADD HIDDEN;
Du kan använda ALTER COLUMN <period_column> DROP HIDDEN
för att rensa den dolda flaggan i en periodkolumn.
C. Ändra schemat med SYSTEM_VERSIONING inställt på OFF
I följande exempel visas hur du ändrar schemat där inställningen SYSTEM_VERSIONING = OFF
fortfarande krävs (lägga till en IDENTITY
kolumn). Det här exemplet inaktiverar datakonsekvenskontrollen. Den här kontrollen är onödig när schemaändringen görs i en transaktion eftersom inga samtidiga dataändringar kan göras.
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;
Relaterat innehåll
- Tidsrelaterade tabeller
- Kom igång med systemversionsbaserade tidstabeller
- Hantera kvarhållning av historiska data i systemversionsbaserade tidstabeller
- systemversionsbaserade tidstabeller med minnesoptimerade tabeller
- ALTER TABLE (Transact-SQL)
- Skapa en systemversionsbaserad temporal tabell
- Ändra data i en systemversionsbaserad temporal tabell
- Fråga efter data i en systemversionsbaserad temporal tabell
- Stoppa systemversioner i en tidstabell med systemversioner