Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Cách trả lại tất cả các ràng buộc khóa ngoại không đáng tin cậy trong SQL Server (Ví dụ T-SQL)

Để trả về danh sách tất cả các ràng buộc khóa ngoại không đáng tin cậy trong cơ sở dữ liệu SQL Server, bạn có thể chạy mã T-SQL bên dưới.

Khóa ngoại không đáng tin cậy là khóa có is_not_trusted cờ được đặt thành 1 .

Ví dụ 1 - Chỉ trả lại các ràng buộc khóa nước ngoài không đáng tin cậy

Truy vấn này chỉ trả về các ràng buộc khóa ngoại không đáng tin cậy trong cơ sở dữ liệu hiện tại. Đối với ví dụ này, tôi chỉ trả về tên của ràng buộc, trạng thái đáng tin cậy của nó, cùng với trạng thái đã bật / tắt của nó.

 CHỌN tên AS 'Ràng buộc', is_not_trusted, is_disabledFROM sys.foreign_keysWHERE is_not_trusted =1; 

Kết quả:

 + ------------------------ + ------------------ + - ------------- + | Ràng buộc | is_not_trusted | is_disabled || ------------------------ + ------------------ + --- ------------ || FK_BandMember_Band | 1 | 1 || FK_BandMember_Musician | 1 | 0 | + ------------------------ + ------------------ + --- ------------ + 

Điều này truy vấn sys.foreign_keys chế độ xem hệ thống. Chúng tôi biết nó chỉ trả về các ràng buộc không đáng tin cậy vì WHERE mệnh đề chỉ xác định các hàng có is_not_trusted cột được đặt thành 1 .

Nếu bạn chỉ muốn trả lại đáng tin cậy ràng buộc khóa ngoại, chỉ cần thay đổi 1 thành 0 .

Tôi cũng đã bao gồm is_disabled vì nó cho chúng ta biết ràng buộc hiện có được kích hoạt hay không. Chúng ta có thể thấy rằng một trong các ràng buộc được kích hoạt và ràng buộc còn lại thì không.

Điều này chứng tỏ thực tế rằng một ràng buộc có thể không đáng tin cậy ngay cả khi nó được kích hoạt. Điều này là do, khi bạn bật (hoặc tạo) một ràng buộc, bạn có tùy chọn yêu cầu nó kiểm tra mọi dữ liệu hiện có trước khi nó được bật. Nếu bạn chọn không kiểm tra dữ liệu hiện có, ràng buộc sẽ vẫn không đáng tin cậy khi nó được bật.

Sau đây là cùng một truy vấn, nhưng lần này tôi bao gồm bảng và bảng được tham chiếu cho mỗi ràng buộc:

 CHỌN tên AS 'Ràng buộc', OBJECT_NAME (parent_object_id) AS 'Bảng', OBJECT_NAME (reference_object_id) AS 'Bảng được tham chiếu', is_disabled, is_not_trustedFROM sys.foreign_keysWHERE is_not_trusted =1; 

Kết quả:

 + ------------------------ + ------------ + -------- ------------ + --------------- + ------------------ + | Ràng buộc | Bảng | Bảng tham chiếu | is_disabled | is_not_trusted || ------------------------ + ------------ + --------- ----------- + --------------- + ------------------ || FK_BandMember_Band | BandMember | Ban nhạc | 1 | 1 || FK_BandMember_Musician | BandMember | Nhạc sĩ | 0 | 1 | + ------------------------ + ------------ + --------- ----------- + --------------- + ------------------ +  

Ví dụ 2 - Trả lại tất cả các ràng buộc về khóa ngoại

Truy vấn sau trả về tất cả các ràng buộc khóa ngoại cho cơ sở dữ liệu hiện tại (không chỉ những ràng buộc không đáng tin cậy):

 CHỌN tên AS 'Ràng buộc', is_not_trusted, is_disabledFROM sys.foreign_keys; 

Kết quả:

 + -------------------------------- + ------------- ----- + --------------- + | Ràng buộc | is_not_trusted | is_disabled || -------------------------------- + -------------- ---- + --------------- || FK_BandMember_Band | 1 | 1 || FK_BandMember_Musician | 1 | 0 || FK_MembershipPeriod_BandMember | 0 | 0 | + -------------------------------- + -------------- ---- + --------------- + 

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để tạo một Bảng được liên kết ODBC theo cách lập trình đến Dạng xem Máy chủ SQL và nó có thể chỉnh sửa được không?

  2. Viết CTE đệ quy bằng cách sử dụng Entity Framework Cú pháp thông thạo hoặc cú pháp nội tuyến

  3. Thêm danh tính AppPool IIS 7 làm nhật ký máy chủ SQL

  4. Không thể tạo phiên bản của nhà cung cấp OLE DB Microsoft.Jet.OLEDB.4.0 cho máy chủ được liên kết rỗng

  5. Mã hóa sao lưu cơ sở dữ liệu SQL Server