SET IDENTITY_INSERT (Transact-SQL)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSQL database w usłudze Microsoft Fabric

Korzystając z tego stwierdzenia, możesz wstawić wartości jawne do kolumny IDENTITY tabeli.

Transact-SQL konwencje składni

Składnia

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

Argumenty

database_name

Nazwa bazy danych, w której znajduje się dana tabela.

schema_name

Nazwa schematu, który zawiera tabelę.

table_name

Nazwa tabeli z kolumną tożsamości.

Uwagi

W dowolnym momencie tylko jedna tabela w sesji może mieć właściwość IDENTITY_INSERT ustawioną na ON. Jeśli tabela ma już tę właściwość ustawioną na , ONa wydasz SET IDENTITY_INSERT ON polecenie dla innej tabeli, SQL Server zwraca komunikat o błędzie, że SET IDENTITY_INSERT jest już ON, i raportuje tabelę, dla której ON jest ustawiona.

  • Gdy increment argument IDENTITY funkcji jest dodatni, a wartość wstawiona jest większa niż aktualna wartość tożsamości dla tabeli, SQL Database Engine automatycznie używa nowej wartości jako aktualnej wartości tożsamości.
  • Gdy increment argument IDENTITY funkcji jest ujemny, a wartość wstawiona jest mniejsza niż aktualna wartość tożsamości dla tabeli, SQL Server automatycznie używa nowej wartości jako aktualnej wartości tożsamości.

Ustawienie SET IDENTITY_INSERT jest ustawione w czasie wykonywania lub wykonywania, a nie w czasie analizy.

Uprawnienia

Musisz być właścicielem stołu lub mieć ALTER na niego pozwolenie.

Przykłady

Poniższy przykład tworzy tabelę z kolumną tożsamości i pokazuje, jak można użyć ustawienia SET IDENTITY_INSERT do wypełnienia luki w wartościach tożsamości spowodowanych przez instrukcję DELETE.

USE AdventureWorks2022;
GO

Utwórz tabelę narzędzi.

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

Wstaw wartości do tabeli products.

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

Utwórz lukę w wartościach tożsamości.

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

SELECT *
FROM dbo.Tool;
GO

Spróbuj wstawić jawną wartość identyfikatora 3.

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

Poprzedzający INSERT kod zwraca następujący błąd:

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.

Ustaw IDENTITY_INSERT na wartość ON.

SET IDENTITY_INSERT dbo.Tool ON;
GO

Spróbuj wstawić jawną wartość identyfikatora 3.

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

SELECT *
FROM dbo.Tool;
GO

Upuść tabelę narzędzi.

DROP TABLE dbo.Tool;
GO