Bagikan melalui


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.

Konvensi sintaks Transact-SQL

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

Lihat juga