SET IDENTITY_INSERT (Transact-SQL)

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analyticssql database v Microsoft Fabric

Použitím tohoto tvrzení můžete vložit explicitní hodnoty do sloupce IDENTITY tabulky.

Transact-SQL konvence syntaxe

Syntax

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

Argumenty

database_name

Název databáze, ve které se daná tabulka nachází.

schema_name

Název schématu, které tabulku obsahuje.

table_name

Název tabulky se sloupcem identity.

Poznámky

Kdykoli může mít vlastnost IDENTITY_INSERT nastavenou na ONpouze jednu tabulku v relaci. Pokud má tabulka tuto vlastnost nastavenou na , ONa vydáte SET IDENTITY_INSERT ON příkaz pro jinou tabulku, SQL Server vrátí chybovou zprávu, která uvádíSET IDENTITY_INSERT, že je již ON, a nahlásí tabulku, pro kterou ON je nastavena.

  • Když increment je argument IDENTITY funkce kladný a vložená hodnota je větší než aktuální hodnota identity tabulky, SQL Database Engine automaticky použije nově vloženou hodnotu jako aktuální hodnotu identity.
  • Když increment je argument IDENTITY funkce záporný a vložená hodnota je menší než aktuální hodnota identity tabulky, SQL Server automaticky použije nově vloženou hodnotu jako aktuální hodnotu identity.

Nastavení SET IDENTITY_INSERT je nastaveno při spuštění nebo spuštění, nikoli v době analýzy.

Dovolení

Musíte vlastnit stůl nebo mít ALTER povolení k jeho umístění.

Příklady

Následující příklad vytvoří tabulku se sloupcem identity a ukazuje, jak se dá nastavení SET IDENTITY_INSERT použít k vyplnění mezery v hodnotách identity způsobených příkazem DELETE.

USE AdventureWorks2022;
GO

Vytvoření tabulky nástrojů

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

Vložte hodnoty do tabulky produktů.

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

Vytvořte mezeru v hodnotách identity.

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

SELECT *
FROM dbo.Tool;
GO

Zkuste vložit explicitní hodnotu ID 3.

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

Předchozí INSERT kód vrací následující chybu:

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.

Nastavte IDENTITY_INSERT na ON.

SET IDENTITY_INSERT dbo.Tool ON;
GO

Zkuste vložit explicitní hodnotu ID 3.

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

SELECT *
FROM dbo.Tool;
GO

Položte stůl na nářadí.

DROP TABLE dbo.Tool;
GO