MENYISIPKAN kolom dengan kumpulan IDENTITAS

Halaman Diperbarui :
Tanggal pembuatan halaman :

SQL Server memiliki properti "IDENTITAS" yang secara otomatis menetapkan nomor berurutan dari 1 ke kolom tertentu saat Anda menambahkan catatan. Misalnya, jika Anda mengatur IDENTITY di kolom A dan menambahkan 3 rekaman, kolom A secara otomatis diisi dengan nilai 1, 2, dan 3 dalam urutan di mana Anda menambahkannya.

Bahkan jika Anda menggunakan pernyataan INSERT, nilainya diatur secara otomatis, jadi tidak perlu secara eksplisit mengatur nilainya, tetapi saya pikir ada kasus di mana Anda ingin mengatur nilai secara eksplisit karena digunakan untuk kunci asing dll.

Sebagai contoh, misalkan ada tabel dengan properti "IDENTITY" yang diatur di kolom "ID" seperti yang ditunjukkan pada gambar.

Pernyataan INSERT yang menyisipkan nilai ke dalam tabel ini, termasuk kolom ID, akan terlihat seperti ini:

insert into [テーブル名] ([ID], [Value]) values (1, 1)

Namun, ketika saya mencoba menjalankannya, saya pikir kesalahan berikut akan muncul.

Msg 544, Level 16, Negara Bagian 1, Baris 1 Ketika IDENTITY_INSERT diatur ke OFF, nilai eksplisit tidak dapat dimasukkan ke dalam kolom identitas tabel 'XXXXX'.

Kolom yang awalnya diatur ke IDENTITY diasumsikan memiliki nilai yang ditetapkan secara otomatis, sehingga Anda tidak dapat mengatur nilai secara eksplisit.

Jika Anda benar-benar ingin mengaturnya, Anda perlu mengatur "IDENTITY_INSERT" ke "ON" seperti yang dijelaskan dalam pesan kesalahan. Aktifkan IDENTITY_INSERT sebelum MENYISIPKAN, dan kembali ke NONAKTIF saat penyisipan selesai, seperti dalam SQL berikut:

set identity_insert [テーブル名] on;
insert into [テーブル名] ([ID], [Value]) values (1, 1)
set identity_insert [テーブル名] off;

-- 確認
select * from [テーブル名];

Anda sekarang dapat secara eksplisit mengatur nilai dan MEMASUKKANnya. INSERT-SELECT menggunakan tabel juga valid.

Kolom dengan IDENTITY secara otomatis diberi nilai dari 1, tetapi jika Anda secara eksplisit menetapkan nilai seperti yang dijelaskan di atas, Anda mungkin bertanya-tanya nomor apa yang akan ditetapkan selanjutnya. Dalam hal ini, nilai berikutnya yang ditetapkan ditetapkan dari angka setelah nilai tertinggi ditambahkan ke tabel, sehingga tidak ada nilai duplikat saat catatan baru disisipkan. (Namun, ada pengecualian karena cacat, dll.)