SET IDENTITY_INSERT (Transact-SQL)
platí pro:SQL ServerAzure SQL Databaseazure SQL Managed Instanceazure Synapse Analytics
Umožňuje explicitní hodnoty vložit do sloupce identity tabulky.
Syntax
SET IDENTITY_INSERT [ [ database_name . ] schema_name . ] table_name { ON | OFF }
Argumenty
database_name
Název databáze, ve které se nachází zadaná tabulka.
schema_name
Název schématu, do kterého tabulka patří.
table_name
Název tabulky se sloupcem identity.
Poznámky
Kdykoli může mít vlastnost IDENTITY_INSERT
nastavenou na ON
pouze jednu tabulku v relaci. Pokud již tabulka má tuto vlastnost nastavenou na ON
a příkaz SET IDENTITY_INSERT ON
je vydán pro jinou tabulku, SQL Server vrátí chybovou zprávu, která uvádí, SET IDENTITY_INSERT
je již ON
a hlásí tabulku, pro kterou je nastavena ON
.
Pokud je vložená hodnota větší než aktuální hodnota identity pro tabulku, SQL Server automaticky použije novou 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í
Uživatel musí vlastnit tabulku nebo mít k tabulce oprávnění ALTER
.
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í kód INSERT
by měl vrátit 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
Drop tool table.
DROP TABLE dbo.Tool;
GO
Související obsah
- CREATE TABLE (Transact-SQL)
-
CREATE TABLE (Transact-SQL) IDENTITY (vlastnost) -
SCOPE_IDENTITY (Transact-SQL) -
INSERT (Transact-SQL) - příkazy
SET (Transact-SQL)