SET IDENTITY_INSERT (Transact-SQL)
Dotyczy:sql Server
Azure SQL Database
Azure SQL Managed Instance
Azure 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ż ON
i 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