Làm cách nào để liệt kê tất cả FK trong cơ sở dữ liệu sqlserver?Có thể liệt kê tất cả các khoá ngoại trong cơ sở dữ liệu không?
Trả lời
Tôi sử dụng tuyên bố này, có vẻ như nó hoạt động khá tốt.
SELECT RC.CONSTRAINT_NAME FK_Name
, KF.TABLE_SCHEMA FK_Schema
, KF.TABLE_NAME FK_Table
, KF.COLUMN_NAME FK_Column
, RC.UNIQUE_CONSTRAINT_NAME PK_Name
, KP.TABLE_SCHEMA PK_Schema
, KP.TABLE_NAME PK_Table
, KP.COLUMN_NAME PK_Column
, RC.MATCH_OPTION MatchOption
, RC.UPDATE_RULE UpdateRule
, RC.DELETE_RULE DeleteRule
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS RC
JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE KF ON RC.CONSTRAINT_NAME = KF.CONSTRAINT_NAME
JOIN INFORMATION_SCHEMA.KEY_COLUMN_USAGE KP ON RC.UNIQUE_CONSTRAINT_NAME = KP.CONSTRAINT_NAME
Về mặt lý thuyết, điều này thật khó. Mô hình quan hệ cho phép bất kỳ trường nào liên quan đến bất kỳ trường nào khác. Những cái nào thực sự được sử dụng được định nghĩa bởi tất cả các câu lệnh SELECT có thể được sử dụng.
Thực tế, nó phụ thuộc vào bao nhiêu bảng có định nghĩa FK được bao gồm. Nếu ai đó làm phiền để xác định cẩn thận tất cả các tài liệu tham khảo FK - và các câu lệnh SELECT dính vào các quy tắc này - bạn có thể truy vấn chúng.
Tuy nhiên, vì một câu lệnh SELECT có thể tham gia vào bất cứ điều gì, không có đảm bảo rằng bạn có tất cả FK trừ khi bạn cũng có tất cả câu lệnh SELECT.
Chỉnh sửa.
SELECT f.name AS ForeignKey,
OBJECT_NAME(f.parent_object_id) AS TableName,
COL_NAME(fc.parent_object_id, fc.parent_column_id) AS ColumnName,
OBJECT_NAME (f.referenced_object_id) AS ReferenceTableName,
COL_NAME(fc.referenced_object_id, fc.referenced_column_id) AS ReferenceColumnName
FROM sys.foreign_keys AS f
INNER JOIN sys.foreign_key_columns AS fc
ON f.OBJECT_ID = fc.constraint_object_id
Có thể làm việc cho bạn.
Tất cả các phím nước ngoài quy định được xác định. Làm thế nào tôi sẽ truy vấn các khóa nước ngoài được xác định? –
Đây không phải là câu trả lời cho câu hỏi. Khóa ngoài là một điều thực, một đối tượng trong cơ sở dữ liệu (hoặc ít nhất là một thuộc tính của một đối tượng). Câu hỏi không yêu cầu liệt kê mọi cột có thể mà bạn có thể tham gia chống lại, điều đó sẽ không có nghĩa là bất kỳ ý nghĩa nào –
@Byron Whitlock: "Tất cả" hiếm khi có nghĩa là tất cả, nó thường có nghĩa là "Tất cả trừ một vài ngoại lệ". –
Bạn cũng có thể sử dụng sơ đồ INFORMATION_SCHEMA kinh điển trong SQL Server 2005 trở đi:
How to find foreign key dependencies in SQL Server?
này sẽ làm việc trong cơ sở dữ liệu khác là tốt.
tôi sử dụng http://technet.microsoft.com/en-us/library/ms189807.aspx
SELECT * FROM sys.foreign_keys
Đó là nếu bạn đang ở trên ít nhất SQL Server 2005 + và muốn nhìn thấy một danh sách các tên FK.
Nhưng bạn có thể muốn biết thêm về các bảng có liên quan quá, phải không, đó là nơi mà câu trả lời có ích.
Dưới đây là một cách thông tin mới hơn trình bày nó
SELECT DISTINCT PARENT_TABLE =
RIGHT(Replace(TC.constraint_name, 'FK_', ''),
Len(Replace(TC.constraint_name, 'FK_', '')) - Charindex('_', Replace(TC.constraint_name, 'FK_', ''))),
CHILD_TABLE = TC.table_name,
CU.column_name,
TC.constraint_name,
TC.constraint_type
FROM information_schema.table_constraints TC
INNER JOIN information_schema.constraint_column_usage CU
ON TC.constraint_name = CU.constraint_name
WHERE TC.constraint_type LIKE '%foreign'
OR TC.constraint_type LIKE '%foreign%'
OR TC.constraint_type LIKE 'foreign%'
- 1. Làm thế nào để liệt kê tất cả các cơ sở dữ liệu MongoDB trong Node.js?
- 2. Liệt kê thông tin về tất cả các tệp cơ sở dữ liệu trong SQL Server
- 3. Liệt kê tất cả các bảng trong cơ sở dữ liệu
- 4. Tôi có thể liệt kê tất cả các bảng trong cơ sở dữ liệu bằng Squirrel SQL bằng cách nào?
- 5. Psql liệt kê tất cả các bảng
- 6. Liệt kê tất cả các kho SVN
- 7. Liệt kê tất cả các chỉ mục
- 8. Làm cách nào để liệt kê tất cả các trình kích hoạt của cơ sở dữ liệu trong sqlite?
- 9. Sql Truy vấn để liệt kê tất cả các khung nhìn trong cơ sở dữ liệu SQL Server 2005
- 10. Liệt kê tất cả các ngoại lệ có thể được ném bằng phương thức
- 11. Liệt kê tất cả cột ngoại trừ một trong R
- 12. Các hệ thống lớn có sử dụng các khoá ngoại trong cơ sở dữ liệu của chúng không?
- 13. PostgreSQL: Làm thế nào để liệt kê tất cả các kiểu dữ liệu có sẵn?
- 14. Liệt kê tất cả virtualenv
- 15. Có thể lưu trữ giá trị null của thuộc tính được liệt kê vào cơ sở dữ liệu không?
- 16. Làm cách nào để xử lý các liệt kê mà không có các trường enum trong cơ sở dữ liệu?
- 17. Liệt kê tất cả các hội đồng .NET có sẵn
- 18. Cách lấy danh sách tất cả các bảng trong hai cơ sở dữ liệu khác nhau
- 19. git liệt kê tất cả các lệnh có sẵn
- 20. Liệt kê tất cả người dùng trong LDAP bằng PHP
- 21. NetworkInterface.getNetworkInterfaces() không liệt kê tất cả các giao diện
- 22. liệt kê tất cả các quy trình trong iOS 5.0.1
- 23. Liệt kê tất cả các hàm dựng sẵn trong javascript?
- 24. Liệt kê tất cả các hành động có thể có trên bảng 4x4 trong Prolog
- 25. Liệt kê tất cả các thư mục trong thư mục
- 26. Nhận Tất cả Ngoại trừ từ cơ sở dữ liệu SQL sử dụng Entity Framework
- 27. Liệt kê tất cả dữ liệu tùy chỉnh được lưu trữ trong AppDomain
- 28. Liệt kê tất cả các tệp trong gói homebrew
- 29. MySQL InnoDB khoá ngoại giữa cơ sở dữ liệu khác nhau
- 30. Liệt kê tất cả các trang web trong IIS C#
Hãy coi chừng! 'INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS' bỏ qua một số khóa ngoại mà' sys.foreign_keys' trả về (trong trường hợp của tôi, một khóa ngoại với 'Enforce For Replication' được đặt thành' No'. Tôi đã sử dụng câu trả lời này thay vì: http: // stackoverflow. com/a/10697248/14731 – Gili
Chúa ban phước cho bạn vì bạn đã cứu tôi hôm nay - Tôi không thể hình dung ra điều này !! – LearnByReading