Megosztás a következőn keresztül:


SET IDENTITY_INSERT (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példányAzure Synapse Analytics

Lehetővé teszi, hogy explicit értékeket szúrjon be egy tábla identitásoszlopába.

Transact-SQL szintaxis konvenciói

Szintaxis

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

Érvek

database_name

Annak az adatbázisnak a neve, amelyben a megadott tábla található.

schema_name

Annak a sémának a neve, amelyhez a tábla tartozik.

table_name

Egy identitásoszlopot tartalmazó tábla neve.

Megjegyzések

Egy munkamenetben egyszerre csak egy tábla rendelkezhet a IDENTITY_INSERT tulajdonság ONértékével. Ha egy táblában már ONvan beállítva ez a tulajdonság, és egy SET IDENTITY_INSERT ON utasítást ad ki egy másik táblához, az SQL Server egy hibaüzenetet ad vissza, amely szerint SET IDENTITY_INSERT már ON, és jelenti azt a táblát, amelyhez a ON be van állítva.

Ha a beszúrt érték nagyobb, mint a tábla jelenlegi identitásértéke, az SQL Server automatikusan az új beszúrt értéket használja aktuális identitásértékként.

A SET IDENTITY_INSERT beállítása végrehajtáskor vagy futtatáskor van beállítva, és nem elemzési időpontban.

Engedélyek

A felhasználónak rendelkeznie kell a táblával, vagy ALTER engedéllyel kell rendelkeznie a táblában.

Példák

Az alábbi példa egy identitásoszlopot tartalmazó táblát hoz létre, és bemutatja, hogyan használható a SET IDENTITY_INSERT beállítás a DELETE utasítás által okozott identitásértékek közötti rés kitöltésére.

USE AdventureWorks2022;
GO

Eszköztábla létrehozása.

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

Értékek beszúrása a termékek táblájába.

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

Hozzon létre egy rést az identitásértékekben.

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

SELECT *
FROM dbo.Tool;
GO

Próbáljon meg beszúrni egy 3-ás explicit azonosítóértéket.

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

Az előző INSERT kódnak a következő hibát kell visszaadnia:

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.

Állítsa IDENTITY_INSERTONértékre.

SET IDENTITY_INSERT dbo.Tool ON;
GO

Próbáljon meg beszúrni egy 3-ás explicit azonosítóértéket.

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

SELECT *
FROM dbo.Tool;
GO

Eszköztábla elvetése.

DROP TABLE dbo.Tool;
GO