SET IDENTITY_INSERT (Transact-SQL)

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSQL-databas i Microsoft Fabric

Genom att använda detta uttalande kan du infoga explicita värden i kolumnen IDENTITY i en tabell.

Transact-SQL syntaxkonventioner

Syntax

SET IDENTITY_INSERT [ [ database_name . ] schema_name . ] table_name { ON | OFF }

Argument

database_name

Namnet på databasen där den angivna tabellen finns.

schema_name

Namnet på schemat som innehåller tabellen.

table_name

Namnet på en tabell med en identitetskolumn.

Anmärkningar

När som helst kan endast en tabell i en session ha egenskapen IDENTITY_INSERT inställd på ON. Om en tabell redan har denna egenskap satt till ON, och du gör en SET IDENTITY_INSERT ON sats för en annan tabell, returnerar SQL Server ett felmeddelande som säger SET IDENTITY_INSERT är redan ON, och rapporterar tabellen för vilken ON den är satt.

  • När argumentet increment för IDENTITY funktionen är positivt, och det insatta värdet är större än det aktuella identitetsvärdet för tabellen, använder SQL Database Engine automatiskt det nya insatta värdet som det aktuella identitetsvärdet.
  • När argumentet increment för IDENTITY funktionen är negativt och det insatta värdet är mindre än det aktuella identitetsvärdet för tabellen, använder SQL Server automatiskt det nya insatta värdet som det aktuella identitetsvärdet.

Inställningen för SET IDENTITY_INSERT anges vid körnings- eller körningstid och inte vid parsningstid.

Behörigheter

Du måste äga bordet eller ha ALTER tillstånd på bordet.

Exempel

I följande exempel skapas en tabell med en identitetskolumn och visar hur inställningen SET IDENTITY_INSERT kan användas för att fylla ett tomrum i identitetsvärdena som orsakas av en DELETE-instruktion.

USE AdventureWorks2022;
GO

Skapa verktygstabell.

CREATE TABLE dbo.Tool
(
    ID INT IDENTITY NOT NULL PRIMARY KEY,
    Name VARCHAR (40) NOT NULL
);
GO

Infoga värden i produkttabellen.

INSERT INTO dbo.Tool (Name)
VALUES ('Screwdriver'),
    ('Hammer'),
    ('Saw'),
    ('Shovel');
GO

Skapa en lucka i identitetsvärdena.

DELETE dbo.Tool
WHERE Name = 'Saw';
GO

SELECT *
FROM dbo.Tool;
GO

Försök att infoga ett explicit ID-värde på 3.

INSERT INTO dbo.Tool (ID, Name)
VALUES (3, 'Garden shovel');
GO

Föregående INSERT kod ger följande fel:

An explicit value for the identity column in table 'AdventureWorks2022.dbo.Tool' can only be specified when a column list is used and IDENTITY_INSERT is ON.

Ange IDENTITY_INSERT till ON.

SET IDENTITY_INSERT dbo.Tool ON;
GO

Försök att infoga ett explicit ID-värde på 3.

INSERT INTO dbo.Tool (ID, Name)
VALUES (3, 'Garden shovel');
GO

SELECT *
FROM dbo.Tool;
GO

Ta bort verktygstabell.

DROP TABLE dbo.Tool;
GO