Bagikan melalui


SET IDENTITY_INSERT (Transact-SQL)

Berlaku untuk:SQL ServerAzure SQL Database Azure SQL Managed InstanceAzure Synapse Analytics

Memungkinkan nilai eksplisit dimasukkan ke dalam kolom identitas tabel.

Konvensi sintaks transact-SQL

Sintaks

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

Argumen

database_name

Nama database tempat tabel yang ditentukan berada.

schema_name

Nama skema tempat tabel berada.

table_name

Nama tabel dengan kolom identitas.

Keterangan

Kapan saja, hanya satu tabel dalam sesi yang dapat mengatur properti IDENTITY_INSERT ke ON. Jika tabel sudah memiliki properti ini yang diatur ke ON, dan pernyataan SET IDENTITY_INSERT ON dikeluarkan untuk tabel lain, SQL Server mengembalikan pesan kesalahan yang menyatakan SET IDENTITY_INSERT sudah ON, dan melaporkan tabel yang ON diatur.

Jika nilai yang disisipkan lebih besar dari nilai identitas saat ini untuk tabel, SQL Server secara otomatis menggunakan nilai baru yang disisipkan sebagai nilai identitas saat ini.

Pengaturan SET IDENTITY_INSERT diatur pada waktu eksekusi atau run time dan bukan pada waktu penguraian.

Izin

Pengguna harus memiliki tabel atau memiliki izin ALTER pada tabel.

Contoh

Contoh berikut membuat tabel dengan kolom identitas dan memperlihatkan bagaimana SET IDENTITY_INSERT pengaturan dapat digunakan untuk mengisi celah dalam nilai identitas yang DELETE disebabkan oleh pernyataan.

USE AdventureWorks2022;
GO

Buat tabel alat.

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

Sisipkan nilai ke dalam tabel produk.

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

Buat celah dalam nilai identitas.

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

SELECT *
FROM dbo.Tool;
GO

Cobalah untuk menyisipkan nilai ID eksplisit 3.

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

Kode INSERT sebelumnya harus mengembalikan kesalahan berikut:

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.

Atur IDENTITY_INSERT ke ON.

SET IDENTITY_INSERT dbo.Tool ON;
GO

Cobalah untuk menyisipkan nilai ID eksplisit 3.

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

SELECT *
FROM dbo.Tool;
GO

Letakkan tabel alat.

DROP TABLE dbo.Tool;
GO