Dưới đây là một số mã T-SQL mà bạn có thể sử dụng để nhận danh sách tất cả các ràng buộc CHECK và khóa ngoại trong cơ sở dữ liệu SQL Server.
Trong ví dụ sau, tôi thực hiện UNION
trên hai truy vấn cơ sở dữ liệu. Một truy vấn sys.foreign_keys
cho các khóa ngoại bị vô hiệu hóa và các truy vấn khác sys.check_constraints
đối với các ràng buộc CHECK bị vô hiệu hóa.
SELECT SCHEMA_NAME(schema_id) AS [Schema], OBJECT_NAME(parent_object_id) AS 'Table', name AS 'Constraint', type_desc, is_disabled, is_not_trusted FROM sys.foreign_keys WHERE is_disabled = 1 UNION SELECT SCHEMA_NAME(schema_id), OBJECT_NAME(parent_object_id), name, type_desc, is_disabled, is_not_trusted FROM sys.check_constraints WHERE is_disabled = 1;
Kết quả:
+----------+------------------+--------------------+------------------------+---------------+------------------+ | Schema | Table | Constraint | type_desc | is_disabled | is_not_trusted | |----------+------------------+--------------------+------------------------+---------------+------------------| | dbo | BandMember | FK_BandMember_Band | FOREIGN_KEY_CONSTRAINT | 1 | 1 | | dbo | City | FK_City_Country | FOREIGN_KEY_CONSTRAINT | 1 | 1 | | dbo | MembershipPeriod | chkValidEndDate | CHECK_CONSTRAINT | 1 | 1 | +----------+------------------+--------------------+------------------------+---------------+------------------+
Đây là những kết quả tôi nhận được trên một trong những cơ sở dữ liệu thử nghiệm trong môi trường phát triển của tôi. Điều này trả về tất cả khóa ngoại bị vô hiệu hóa và ràng buộc KIỂM TRA trong cơ sở dữ liệu hiện tại. Để kiểm tra cơ sở dữ liệu khác, chỉ cần chuyển sang cơ sở dữ liệu đó và chạy nó ở đó.
Lưu ý rằng khi bạn tắt một ràng buộc, is_not_trusted
cờ được đặt thành 1
, và ràng buộc được coi là không đáng tin cậy. Khi bạn bật lại ràng buộc, bạn có tùy chọn đặt lại nó thành đáng tin cậy hoặc để nó là không đáng tin cậy. Để biết thêm thông tin về cách khôi phục độ tin cậy trong một ràng buộc, hãy xem Cách khôi phục niềm tin trong một ràng buộc khóa ngoại trong SQL Server và những điều bạn nên biết với NOCHECK khi bật một ràng buộc kiểm tra trong SQL Server.