Udostępnij za pośrednictwem


SET IDENTITY_INSERT (Transact-SQL)

Dotyczy:sql ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics

Umożliwia wstawianie jawnych wartości do kolumny tożsamości 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ę określona tabela.

schema_name

Nazwa schematu, do którego należy tabela.

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 ON, a instrukcja SET IDENTITY_INSERT ON jest wystawiana dla innej tabeli, program SQL Server zwraca komunikat o błędzie informujący, że SET IDENTITY_INSERT jest już ONi zgłasza tabelę, dla której ustawiono ON.

Jeśli wstawiona wartość jest większa niż bieżąca wartość tożsamości dla tabeli, program SQL Server automatycznie używa nowej wstawionej wartości jako bieżącej wartości tożsamości.

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

Uprawnienia

Użytkownik musi być właścicielem tabeli lub mieć uprawnienia ALTER w tabeli.

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

Poprzedni kod INSERT powinien zwrócić 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