DBCC CHECKIDENT (Transact-SQL)

Berlaku untuk: SQL Server Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics

Memeriksa nilai identitas saat ini untuk tabel yang ditentukan dalam SQL Server dan, jika diperlukan, mengubah nilai identitas. Anda juga dapat menggunakan DBCC CHECKIDENT untuk mengatur nilai identitas baru saat ini secara manual untuk kolom identitas.

Konvensi sintaks transact-SQL

Sintaks

Sintaks untuk database SQL Server dan Azure SQL:

DBCC CHECKIDENT
 (
    table_name
        [ , { NORESEED | { RESEED [ , new_reseed_value ] } } ]
)
[ WITH NO_INFOMSGS ]

Sintaks untuk Azure Synapse Analytics:

DBCC CHECKIDENT
 (
    table_name
        [ RESEED , new_reseed_value ]
)
[ WITH NO_INFOMSGS ]

Catatan

Untuk melihat sintaks Transact-SQL untuk SQL Server 2014 dan yang lebih lama, lihat Dokumentasi versi sebelumnya.

Argumen

nama tabel

Nama tabel untuk memeriksa nilai identitas saat ini. Tabel yang ditentukan harus berisi kolom identitas. Nama tabel harus mengikuti aturan untuk pengidentifikasi. Dua atau tiga nama bagian harus dibatasi, seperti Person.AddressType atau [Person].[AddressType].

NORESEED

Menentukan bahwa nilai identitas saat ini tidak boleh diubah.

RESEED

Menentukan bahwa nilai identitas saat ini harus diubah.

new_reseed_value

Nilai baru yang akan digunakan sebagai nilai kolom identitas saat ini.

DENGAN NO_INFOMSGS

Menyembunyikan semua pesan informasi.

Keterangan

Koreksi khusus yang dilakukan pada nilai identitas saat ini bergantung pada spesifikasi parameter.

Perintah DBCC CHECKIDENT Koreksi atau koreksi identitas yang dibuat
DBCC CHECKIDENT (<table_name>, NORESEED) Nilai identitas saat ini tidak diatur ulang. DBCC CHECKIDENT mengembalikan nilai identitas saat ini dan nilai maksimum kolom identitas saat ini. Jika kedua nilai tidak sama, Anda harus mengatur ulang nilai identitas untuk menghindari potensi kesalahan atau celah dalam urutan nilai.
DBCC CHECKIDENT (<table_name>)

atau

DBCC CHECKIDENT (<table_name>, RESEED)
Jika nilai identitas saat ini untuk tabel kurang dari nilai identitas maksimum yang disimpan di kolom identitas, nilai tersebut diatur ulang menggunakan nilai maksimum di kolom identitas. Lihat bagian Pengecualian berikut ini.
DBCC CHECKIDENT (<table_name>, RESEED, <new_reseed_value>) Nilai identitas saat ini diatur ke new_reseed_value. Jika tidak ada baris yang disisipkan ke dalam tabel sejak tabel dibuat, atau jika semua baris telah dihapus dengan menggunakan pernyataan TRUNCATE TABLE, baris pertama yang disisipkan setelah Anda menjalankan DBCC CHECKIDENT menggunakan new_reseed_value sebagai identitas. Jika baris ada dalam tabel, atau jika semua baris telah dihapus dengan menggunakan pernyataan DELETE, baris berikutnya yang disisipkan menggunakan new_reseed_value + nilai tahapan saat ini . Jika transaksi menyisipkan baris dan kemudian digulung balik, baris berikutnya yang disisipkan menggunakan new_reseed_value + nilai tahapan saat ini seolah-olah baris telah dihapus. Jika tabel tidak kosong, mengatur nilai identitas ke angka yang kurang dari nilai maksimum di kolom identitas dapat mengakibatkan salah satu kondisi berikut:

- Jika batasan KUNCI PRIMER atau UNIK ada di kolom identitas, pesan kesalahan 2627 akan dihasilkan pada operasi penyisipan nanti ke dalam tabel karena nilai identitas yang dihasilkan akan bertentangan dengan nilai yang ada.

- Jika batasan KUNCI PRIMER atau UNIK tidak ada, operasi penyisipan nanti akan menghasilkan nilai identitas duplikat.

Pengecualian

Tabel berikut ini mencantumkan kondisi saat DBCC CHECKIDENT tidak secara otomatis mengatur ulang nilai identitas saat ini, dan menyediakan metode untuk mengatur ulang nilai.

Kondisi Reset metode
Nilai identitas saat ini lebih besar dari nilai maksimum dalam tabel. Jalankan DBCC CHECKIDENT (<table_name>, NORESEED) untuk menentukan nilai maksimum saat ini di kolom . Selanjutnya, tentukan nilai tersebut sebagai new_reseed_value dalam DBCC CHECKIDENT (<table_name>, RESEED, <new_reseed_value>) perintah.

atau

Jalankan DBCC CHECKIDENT (<table_name>, RESEED,<new_reseed_value>) dengan new_reseed_value diatur ke nilai rendah, lalu jalankan DBCC CHECKIDENT (<table_name>, RESEED) untuk memperbaiki nilai.
Semua baris dihapus dari tabel. Jalankan DBCC CHECKIDENT (<table_name>, RESEED, <new_reseed_value>) dengan new_reseed_value diatur ke nilai awal baru.

Mengubah nilai nilai awal

Nilai awal adalah nilai yang dimasukkan ke dalam kolom identitas untuk baris pertama yang dimuat ke dalam tabel. Semua baris berikutnya berisi nilai identitas saat ini ditambah nilai kenaikan di mana nilai identitas saat ini adalah nilai identitas terakhir yang dihasilkan untuk tabel atau tampilan.

Anda tidak dapat menggunakan DBCC CHECKIDENT untuk tugas-tugas berikut:

  • Ubah nilai awal asli yang ditentukan untuk kolom identitas saat tabel atau tampilan dibuat.

  • Reseed baris yang sudah ada dalam tabel atau tampilan.

Untuk mengubah nilai nilai awal asli dan mem-reseed baris yang ada, letakkan kolom identitas dan buat ulang yang menentukan nilai seed baru. Saat tabel berisi data, nomor identitas ditambahkan ke baris yang ada dengan nilai benih dan kenaikan yang ditentukan. Urutan di mana baris diperbarui tidak dijamin.

Tataan hasil

Apakah Anda menentukan opsi apa pun untuk tabel yang berisi kolom identitas, DBCC CHECKIDENT mengembalikan pesan berikut untuk semua operasi kecuali satu. Operasi tersebut menentukan nilai seed baru.

Memeriksa informasi identitas: nilai identitas saat ini '<nilai> identitas saat ini', nilai kolom saat ini '<nilai> kolom saat ini'. Eksekusi DBCC selesai. Jika DBCC mencetak pesan kesalahan, hubungi administrator sistem Anda.

Ketika DBCC CHECKIDENT digunakan untuk menentukan nilai seed baru dengan menggunakan RESEED <new_reseed_value>, pesan berikut dikembalikan.

Memeriksa informasi identitas: nilai identitas saat ini '<nilai> identitas saat ini'. Eksekusi DBCC selesai. Jika DBCC mencetak pesan kesalahan, hubungi administrator sistem Anda.

Izin

Pemanggil harus memiliki skema yang berisi tabel, atau menjadi anggota peran server tetap sysadmin , peran database tetap db_owner , atau peran database tetap db_ddladmin .

Azure Synapse Analytics memerlukan izin db_owner.

Contoh

A. Reset nilai identitas saat ini, jika diperlukan

Contoh berikut mereset nilai identitas saat ini, jika diperlukan, dari tabel yang ditentukan dalam AdventureWorks2022 database.

USE AdventureWorks2022;
GO
DBCC CHECKIDENT ('Person.AddressType');
GO

B. Melaporkan nilai identitas saat ini

Contoh berikut melaporkan nilai identitas saat ini dalam tabel yang ditentukan dalam AdventureWorks2022 database, dan tidak memperbaiki nilai identitas jika salah.

USE AdventureWorks2022;
GO
DBCC CHECKIDENT ('Person.AddressType', NORESEED);
GO

C. Paksa nilai identitas saat ini ke nilai baru

Contoh berikut memaksa nilai identitas saat ini dalam AddressTypeID kolom dalam AddressType tabel menjadi nilai 10. Karena tabel memiliki baris yang sudah ada, baris berikutnya yang disisipkan akan menggunakan 11 sebagai nilai. Nilai identitas baru saat ini yang ditentukan untuk kolom ditambah 1 (yang merupakan nilai kenaikan kolom).

USE AdventureWorks2022;
GO
DBCC CHECKIDENT ('Person.AddressType', RESEED, 10);
GO

D. Mengatur ulang nilai identitas pada tabel kosong

Contoh berikut mengasumsikan identitas (1, 1) tabel dan memaksa nilai identitas saat ini dalam ErrorLogID kolom dalam ErrorLog tabel menjadi nilai 1, setelah menghapus semua rekaman dari tabel. Karena tabel tidak memiliki baris yang sudah ada, baris berikutnya yang disisipkan akan menggunakan 1 sebagai nilai, yaitu, nilai identitas baru saat ini tanpa menambahkan nilai kenaikan yang ditentukan untuk kolom setelah TRUNCATE, atau menambahkan nilai kenaikan setelah DELETE.

USE AdventureWorks2022;
GO
TRUNCATE TABLE dbo.ErrorLog
GO
DBCC CHECKIDENT ('dbo.ErrorLog', RESEED, 1);
GO
DELETE FROM dbo.ErrorLog
GO
DBCC CHECKIDENT ('dbo.ErrorLog', RESEED, 0);
GO

Lihat juga