Sdílet prostřednictvím


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.

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 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 ONpouze jednu tabulku v relaci. Pokud již tabulka má tuto vlastnost nastavenou na ONa 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ž ONa 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
  • CREATE TABLE (Transact-SQL)
  • CREATE TABLE (Transact-SQL) IDENTITY (vlastnost)
  • SCOPE_IDENTITY (Transact-SQL)
  • INSERT (Transact-SQL)
  • příkazy SET (Transact-SQL)