CHECKCONSTRAINTS DBCC (Transact-SQL)
Berlaku untuk:SQL Server Azure SQL DatabaseAzure SQL Managed Instance
Memeriksa integritas batasan tertentu atau semua batasan pada tabel tertentu dalam database saat ini.
Sintaks
DBCC CHECKCONSTRAINTS
[
(
table_name | table_id | constraint_name | constraint_id
)
]
[ WITH
[ { ALL_CONSTRAINTS | ALL_ERRORMSGS } ]
[ , ] [ NO_INFOMSGS ]
]
Catatan
Untuk melihat sintaks Transact-SQL untuk SQL Server 2014 dan yang lebih lama, lihat Dokumentasi versi sebelumnya.
Argumen
| table_name | table_id | constraint_name constraint_id
Tabel atau batasan yang akan diperiksa. Saat table_name atau table_id ditentukan, semua batasan yang diaktifkan pada tabel tersebut dicentang. Saat constraint_name atau constraint_id ditentukan, hanya batasan tersebut yang diperiksa. Jika pengidentifikasi tabel atau pengidentifikasi batasan tidak ditentukan, semua batasan yang diaktifkan pada semua tabel dalam database saat ini akan diperiksa.
Nama batasan secara unik mengidentifikasi tabel tempatnya berada. Untuk informasi selengkapnya, lihat Pengidentifikasi Database.
WITH
Mengaktifkan opsi yang akan ditentukan.
ALL_CONSTRAINTS
Memeriksa semua batasan yang diaktifkan dan dinonaktifkan pada tabel jika nama tabel ditentukan atau jika semua tabel dicentang; jika tidak, hanya memeriksa batasan yang diaktifkan.
ALL_CONSTRAINTS
tidak berpengaruh ketika nama batasan ditentukan.ALL_ERRORMSGS
Mengembalikan semua baris yang melanggar batasan dalam tabel yang dicentang. Defaultnya adalah 200 baris pertama.
NO_INFOMSGS
Menyembunyikan semua pesan informasi.
Keterangan
DBCC CHECKCONSTRAINTS
membangun dan menjalankan kueri untuk semua batasan KUNCI ASING dan batasan CHECK pada tabel.
Misalnya, kueri kunci asing adalah dari formulir berikut:
SELECT <columns>
FROM <table_being_checked> LEFT JOIN <referenced_table>
ON <table_being_checked.fkey1> = <referenced_table.pkey1>
AND <table_being_checked.fkey2> = <referenced_table.pkey2>
WHERE <table_being_checked.fkey1> IS NOT NULL
AND <referenced_table.pkey1> IS NULL
AND <table_being_checked.fkey2> IS NOT NULL
AND <referenced_table.pkey2> IS NULL;
Data kueri disimpan dalam tabel sementara. Setelah semua tabel atau batasan yang diminta diperiksa, kumpulan hasil dikembalikan.
DBCC CHECKCONSTRAINTS
memeriksa integritas batasan FOREIGN KEY dan CHECK tetapi tidak memeriksa integritas struktur data pada disk tabel. Pemeriksaan struktur data ini dapat dilakukan dengan menggunakan DBCC CHECKDB dan DBCC CHECKTABLE.
Berlaku untuk: SQL Server 2016 (13.x) dan versi yang lebih baru
Jika table_name atau table_id ditentukan dan diaktifkan untuk penerapan versi sistem, DBCC CHECKCONSTRAINTS
juga melakukan pemeriksaan konsistensi data temporal pada tabel yang ditentukan. Ketika NO_INFOMSGS tidak ditentukan, perintah ini akan mengembalikan setiap pelanggaran konsistensi dalam output pada baris terpisah. Format output akan menjadi ([pkcol1], [pkcol2]..) = (<pkcol1_value>, <pkcol2_value>...)
AND <what is wrong with temporal table record>
.
Centang | Info tambahan dalam output jika pemeriksaan gagal |
---|---|
PeriodEndColumn >= PeriodStartColumn (saat ini) | [sys_end] = '{0}' AND MAX(DATETIME2) = '9999-12-31 23:59:59.99999' |
PeriodEndColumn >= PeriodStartColumn (saat ini, riwayat) | [sys_start] = '{0}' AND [sys_end] = '{1}' |
PeriodStartColumn < current_utc_time (saat ini) | [sys_start] = '{0}' DAN SYSUTCTIME |
Current_utc_time PeriodEndColumn < (riwayat) | [sys_end] = '{0}' DAN SYSUTCTIME |
Tumpang tindih | (sys_start1, sys_end1), (sys_start2, sys_end2) untuk dua rekaman yang tumpang tindih. Jika ada lebih dari dua rekaman yang tumpang tindih, output akan memiliki beberapa baris yang masing-masing menunjukkan sepasang tumpang tindih. |
Anda tidak dapat menentukan constraint_name
atau constraint_id
untuk hanya menjalankan pemeriksaan konsistensi temporal.
Tataan hasil
DBCC CHECKCONSTRAINTS
mengembalikan kumpulan baris dengan kolom berikut.
Nama kolom | Jenis data | Deskripsi |
---|---|---|
Nama Tabel | varchar | Nama tabel. |
Nama Batasan | varchar | Nama batasan yang dilanggar. |
Di mana | varchar | Penetapan nilai kolom yang mengidentifikasi baris atau baris yang melanggar batasan. Nilai dalam kolom ini dapat digunakan dalam klausa WHERE dari pernyataan SELECT yang mengkueri baris yang melanggar batasan. |
DBCC CHECKCONSTRAINTS
tidak dijamin untuk menemukan semua pelanggaran batasan. Jika satu baris melanggar beberapa batasan, hanya WHERE
klausul untuk pelanggaran pertama yang dicantumkan. Kecuali ada baris lain dengan kombinasi nilai yang sama yang menghasilkan pelanggaran, dan memiliki pelanggaran tersebut sebagai pelanggaran pertama yang ditemukan, kombinasi nilai akan hilang dari tataan hasil yang dikembalikan. Anda mungkin harus menjalankan DBCC CHECKCONSTRAINTS
dan memperbaiki masalah beberapa kali sebelum menemukan semua pelanggaran batasan dalam database.
Izin
Memerlukan keanggotaan dalam peran server tetap sysadmin atau peran database tetap db_owner .
Contoh
A. Memeriksa tabel
Contoh berikut memeriksa integritas batasan tabel Table1
dalam AdventureWorks2022
database.
USE AdventureWorks2022;
GO
CREATE TABLE Table1 (Col1 INT, Col2 CHAR(30));
GO
INSERT INTO Table1 VALUES (100, 'Hello');
GO
ALTER TABLE Table1 WITH NOCHECK ADD CONSTRAINT chkTab1 CHECK (Col1 > 100);
GO
DBCC CHECKCONSTRAINTS (Table1);
GO
B. Memeriksa batasan tertentu
Contoh berikut memeriksa integritas batasan CK_ProductCostHistory_EndDate
.
USE AdventureWorks2022;
GO
DBCC CHECKCONSTRAINTS ('Production.CK_ProductCostHistory_EndDate');
GO
C. Periksa semua batasan yang diaktifkan dan dinonaktifkan pada semua tabel
Contoh berikut memeriksa integritas semua batasan yang diaktifkan dan dinonaktifkan pada semua tabel dalam database saat ini.
DBCC CHECKCONSTRAINTS WITH ALL_CONSTRAINTS;
GO