DBCC CHECKIDENT (SQL Transaksi)
Berlaku untuk:
SQL Server (semua versi yang didukung)
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Memeriksa nilai identitas saat ini untuk tabel yang ditentukan di SQL Server 2019 (15.x) dan, jika diperlukan, mengubah nilai identitas. Anda juga dapat menggunakan DBCC CHECKIDENT untuk mengatur nilai identitas baru saat ini secara manual untuk kolom identitas.
Sintaks
-- Syntax for SQL Server and Azure SQL Database
DBCC CHECKIDENT
(
table_name
[, { NORESEED | { RESEED [, new_reseed_value ] } } ]
)
[ WITH NO_INFOMSGS ]
-- Syntax for 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
table_name
Adalah 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
Adalah nilai baru untuk digunakan sebagai nilai kolom identitas saat ini.
DENGAN NO_INFOMSGS
Menyembunyikan semua pesan informasi.
Keterangan
Koreksi spesifik 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 tersebut 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 kenaikan 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 menghasilkan salah satu kondisi berikut: -Jika batasan PRIMARY KEY atau UNIQUE ada pada 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 PRIMARY KEY atau UNIQUE tidak ada, operasi penyisipan nanti akan menghasilkan nilai identitas duplikat. |
Pengecualian
Tabel berikut mencantumkan kondisi saat DBCC CHECKIDENT tidak secara otomatis mengatur ulang nilai identitas saat ini, dan menyediakan metode untuk mengatur ulang nilai.
| Kondisi | Mereset metode |
|---|---|
| Nilai identitas saat ini lebih besar dari nilai maksimum dalam tabel. | Jalankan DBCC CHECKIDENT (table_name, NORESEED) untuk menentukan nilai maksimum saat ini dalam kolom. Selanjutnya, tentukan nilai tersebut sebagai new_reseed_value dalam perintah DBCC CHECKIDENT (table_name, RESEED,new_reseed_value). -ATAU- Jalankan DBCC CHECKIDENT (table_name, RESEED,new_reseed_value) dengan new_reseed_value diatur ke nilai yang sangat 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 Benih
Nilai awal adalah nilai yang disisipkan 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 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 mereseed baris yang ada, letakkan kolom identitas dan buat ulang untuk menentukan nilai seed baru. Saat tabel berisi data, nomor identitas ditambahkan ke baris yang sudah 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.
Checking identity information: current identity value '\<current identity value>', current column value '\<current column value>'. DBCC execution completed. If DBCC printed error messages, contact your system administrator.
Ketika DBCC CHECKIDENT digunakan untuk menentukan nilai seed baru dengan menggunakan RESEED new_reseed_value, pesan berikut dikembalikan.
Checking identity information: current identity value '\<current identity value>'. DBCC execution completed. If DBCC printed error messages, contact your system administrator.
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. Mereset nilai identitas saat ini, jika diperlukan
Contoh berikut mereset nilai identitas saat ini, jika diperlukan, dari tabel yang ditentukan dalam database AdventureWorks2012 .
USE AdventureWorks2012;
GO
DBCC CHECKIDENT ('Person.AddressType');
GO
B. Melaporkan nilai identitas saat ini
Contoh berikut melaporkan nilai identitas saat ini dalam tabel yang ditentukan dalam database AdventureWorks2012 , dan tidak memperbaiki nilai identitas jika salah.
USE AdventureWorks2012;
GO
DBCC CHECKIDENT ('Person.AddressType', NORESEED);
GO
C. Memaksa nilai identitas saat ini ke nilai baru
Contoh berikut memaksa nilai identitas saat ini dalam AddressTypeID kolom dalam AddressType tabel ke 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 AdventureWorks2012;
GO
DBCC CHECKIDENT ('Person.AddressType', RESEED, 10);
GO
D. Mereset nilai identitas pada tabel kosong
Contoh berikut memaksa nilai identitas saat ini dalam ErrorLogID kolom dalam ErrorLog tabel ke 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.
USE AdventureWorks2012;
GO
TRUNCATE TABLE dbo.ErrorLog
GO
DBCC CHECKIDENT ('dbo.ErrorLog', RESEED, 1);
GO
Lihat juga
ALTER TABLE (Transact-SQL)
BUAT TABEL (Transact-SQL)
DBCC (SQL Bertransaksi)
IDENTITY (Properti) (transact-SQL)
Mereplikasi Kolom Identitas
USE (Transact-SQL)
IDENT_SEED (SQL Bertransaksi)
IDENT_INCR (SQL Bertransaksi)
