Kommentar
Å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-databas i Microsoft Fabric
Använd instruktionen ALTER TABLE för att lägga till, ändra eller ta bort en kolumn.
Remarks
Du behöver CONTROL behörighet på nuvarande och historiktabeller för att ändra schemat för en temporär tabell.
Under en ALTER TABLE åtgärd har systemet ett schemalås på båda tabellerna.
Database Engine vidarebefordrar schemaändringen till historiktabellen, beroende på vilken typ av ändring det är.
Att lägga till varchar(max), nvarchar(max), varbinary(max) eller xml-kolumner med standardinställningar är en uppdateringsoperation för data på alla utgåvor av SQL Server.
Om radstorleken efter att en kolumn lagts till överskrider radstorleksgränsen kan du inte lägga till nya kolumner 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. Kolumnoperationen ALTER körs inte online, oavsett vilket värde du anger för alternativet ONLINE .
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 - Att lägga till en
SPARSEkolumn eller ändra en befintlig kolumn till att varaSPARSEnär historiktabellen sätts tillDATA_COMPRESSION = PAGEellerDATA_COMPRESSION = ROW, vilket är standard för historiktabellen. - Lägga till en
COLUMN_SET - Att lägga till en
ROWGUIDCOLkolumn eller ändra en befintlig kolumn till att varaROWGUIDCOL - Ä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 en temporär tabell.
ALTER TABLE dbo.Department
ALTER COLUMN DeptName VARCHAR (100);
ALTER TABLE dbo.Department
ADD WebAddress NVARCHAR (255)
CONSTRAINT DF_WebAddress DEFAULT 'www.example.com' NOT NULL;
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
Följande exempel visar hur man ändrar schemat när man fortfarande behöver sätta SYSTEM_VERSIONING = OFF (genom att lägga till en IDENTITY kolumn). Det här exemplet inaktiverar datakonsekvenskontrollen. Denna kontroll är onödig när du gör schemaändringen inom en transaktion, eftersom inga samtidiga dataändringar kan ske.
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
CONSTRAINT DF_Cntr DEFAULT 0 NOT NULL;
ALTER TABLE [dbo].[CompanyLocation]
SET (
SYSTEM_VERSIONING = ON
(HISTORY_TABLE = [dbo].[CompanyLocationHistory])
);
COMMIT TRANSACTION;
Relaterat innehåll
- Temporala 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 systemversionering på en systemversionerad temporär tabell