Dela via


SET IDENTITY_INSERT (Transact-SQL)

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics

Tillåter att explicita värden infogas i identitetskolumnen 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 tabellen tillhör.

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 den här egenskapen inställd på ON, och en SET IDENTITY_INSERT ON-instruktion utfärdas för en annan tabell, returnerar SQL Server ett felmeddelande som anger SET IDENTITY_INSERT redan är ONoch rapporterar tabellen som ON har angetts för.

Om värdet som infogas är större än det aktuella identitetsvärdet för tabellen använder SQL Server automatiskt det nya infogade värdet som aktuellt identitetsvärde.

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

Behörigheter

Användaren måste äga tabellen eller ha ALTER behörighet i tabellen.

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 bör returnera 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