MENYELITKAN lajur dengan set IDENTITI

Laman dikemaskini :
Tarikh penciptaan halaman :

SQL Server mempunyai sifat "IDENTITI" yang secara automatik mengesetkan nombor berurutan daripada 1 kepada lajur tertentu apabila anda menambah rekod. Contohnya, jika anda mengesetkan IDENTITI dalam lajur A dan menambah 3 rekod, lajur A diisi secara automatik dengan nilai 1, 2 dan 3 dalam tertib yang anda tambahkannya.

Walaupun anda menggunakan pernyataan INSERT, nilai ditetapkan secara automatik, jadi tidak perlu menetapkan nilai secara eksplisit, tetapi saya fikir terdapat kes di mana anda ingin menetapkan nilai secara eksplisit kerana ia digunakan untuk kunci asing dll.

Sebagai contoh, andaikan terdapat jadual dengan sifat "IDENTITY" yang ditetapkan dalam lajur "ID" seperti yang ditunjukkan dalam gambar.

Pernyataan INSERT yang menyelitkan nilai ke dalam jadual ini, termasuk lajur ID, akan kelihatan seperti ini:

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

Walau bagaimanapun, apabila saya cuba menjalankannya, saya fikir ralat berikut akan muncul.

Msg 544, Aras 16, Negeri 1, Laluan 1 Apabila IDENTITY_INSERT disetkan kepada OFF, nilai eksplisit tidak boleh dimasukkan ke dalam lajur identiti jadual 'XXXXX'.

Lajur yang pada asalnya ditetapkan kepada IDENTITI diandaikan mempunyai nilai yang ditetapkan secara automatik, jadi anda tidak boleh menetapkan nilai secara eksplisit.

Jika anda benar-benar mahu menetapkannya, anda perlu menetapkan "IDENTITY_INSERT" kepada "ON" seperti yang diterangkan dalam mesej ralat. Hidupkan IDENTITY_INSERT sebelum MEMASUKKAN dan kembali ke OFF apabila sisipan selesai, seperti dalam SQL berikut:

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

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

Anda kini boleh menetapkan nilai secara eksplisit dan INSERTnya. INSERT-SELECT menggunakan jadual juga sah.

Lajur dengan IDENTITI diberikan nilai secara automatik dari 1, tetapi jika anda secara eksplisit menetapkan nilai seperti yang diterangkan di atas, anda mungkin tertanya-tanya nombor apa yang akan diberikan seterusnya. Dalam kes ini, nilai seterusnya yang diberikan diberikan diberikan dari nombor selepas nilai tertinggi ditambah ke jadual, jadi tidak ada nilai pendua apabila rekod baru dimasukkan. (Walau bagaimanapun, terdapat pengecualian kerana kecacatan, dll.)