Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för: SQL Server 2016 (13.x) och senare versioner
Azure SQL Database
Azure SQL Managed Instance
SQL Database i Förhandsversion av Microsoft Fabric
Använd instruktionen ALTER TABLE för att lägga till, ändra eller ta bort en kolumn.
Remarks
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 behandlas inte 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
IDENTITYkolumn - Lägga till en
SPARSEkolumn eller ändra befintlig kolumn så att denSPARSEnär historiktabellen är inställd påDATA_COMPRESSION = PAGEellerDATA_COMPRESSION = ROW, vilket är standardvärdet för historiktabellen. - Lägga till en
COLUMN_SET - Lägga till en
ROWGUIDCOLkolumn eller ändra befintlig kolumn tillROWGUIDCOL - Ändra en
NULLkolumn tillNOT NULLom kolumnen innehåller null-värden i den aktuella tabellen eller historiktabellen
Examples
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;
Related content
- Temporal tables
- 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
- Avsluta systemversionering på en systemversionerad temporal tabell