Bạn có thể sử dụng OBJECTPROPERTY()
trong SQL Server để kiểm tra xem một bảng có một hoặc nhiều ràng buộc khóa ngoại hay không.
Để thực hiện việc này, hãy chuyển ID đối tượng của bảng làm đối số đầu tiên và TableHasForeignKey
như đối số thứ hai. Hàm trả về 1
hoặc 0
tùy thuộc vào việc nó có ràng buộc khóa ngoại hay không.
Giá trị trả về 1
có nghĩa là bảng hiện có ràng buộc khóa ngoại và giá trị 0
có nghĩa là không. Giá trị trả về 1
áp dụng bất kể bảng có bao nhiêu khóa ngoại (miễn là bảng có ít nhất một khóa).
Nếu bạn muốn có danh sách thực tế các khóa ngoại, hãy xem Liệt kê Tất cả Khóa Ngoại trên Bảng trong SQL Server.
Ví dụ 1 - Cách sử dụng cơ bản
Dưới đây là một ví dụ nhanh để chứng minh.
USE WideWorldImportersDW; SELECT OBJECTPROPERTY(1493580359, 'TableHasForeignKey') AS [TableHasForeignKey];
Kết quả:
+----------------------+ | TableHasForeignKey | |----------------------| | 1 | +----------------------+
Trong trường hợp này, WideWorldImportersDW cơ sở dữ liệu có một bảng với ID được cung cấp và nó có ràng buộc khóa ngoại.
Ví dụ 2 - Lấy ID đối tượng
Nếu bạn biết tên của bảng, nhưng không biết ID của nó, bạn có thể sử dụng OBJECT_ID()
chức năng truy xuất ID dựa trên tên của nó.
Ví dụ:
SELECT OBJECTPROPERTY(OBJECT_ID('Fact.Order'), 'TableHasForeignKey') AS [TableHasForeignKey];
Kết quả:
+----------------------+ | TableHasForeignKey | |----------------------| | 1 | +----------------------+
Đây là đối tượng tương tự từ ví dụ trước.
Đây là một lần nữa với đầu ra ID riêng biệt.
SELECT OBJECT_ID('Fact.Order') AS [Object ID], OBJECTPROPERTY(OBJECT_ID('Fact.Order'), 'TableHasForeignKey') AS [TableHasForeignKey];
Kết quả:
+-------------+----------------------+ | Object ID | TableHasForeignKey | |-------------+----------------------| | 1493580359 | 1 | +-------------+----------------------+
Ví dụ 3 - Khi Bảng KHÔNG có Khóa Ngoại
Đây là những gì sẽ xảy ra khi bảng không có khóa ngoài.
SELECT OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'TableHasForeignKey') AS [TableHasForeignKey];
Kết quả:
+----------------------+ | TableHasForeignKey | |----------------------| | 0 | +----------------------+
Trong trường hợp này, đối tượng là một bảng, chỉ là nó không có khóa ngoại.
Ví dụ 4 - Khi Đối tượng không phải là Bảng
Dưới đây là những gì sẽ xảy ra khi cơ sở dữ liệu chứa một đối tượng có ID, nhưng đối tượng đó không phải là một bảng.
SELECT OBJECTPROPERTY(OBJECT_ID('Sequences.ReseedAllSequences'), 'TableHasForeignKey') AS [TableHasForeignKey];
Kết quả:
+----------------------+ | TableHasForeignKey | |----------------------| | NULL | +----------------------+
Ví dụ 5 - Đối tượng không tồn tại
SQL Server giả định rằng ID đối tượng nằm trong ngữ cảnh cơ sở dữ liệu hiện tại. Nếu bạn chuyển một ID đối tượng từ một cơ sở dữ liệu khác, bạn sẽ nhận được kết quả NULL hoặc bạn sẽ nhận được kết quả không chính xác.
SELECT OBJECTPROPERTY(OBJECT_ID('InvalidObject'), 'TableHasForeignKey') AS [InvalidObject], OBJECTPROPERTY(12345678, 'TableHasForeignKey') AS [12345678];
Kết quả:
+-----------------+------------+ | InvalidObject | 12345678 | |-----------------+------------| | NULL | NULL | +-----------------+------------+
Trong trường hợp này, cơ sở dữ liệu không chứa các đối tượng có tên hoặc ID đó, vì vậy tôi nhận được kết quả NULL.
Bạn cũng sẽ nhận được NULL do lỗi hoặc nếu bạn không có quyền xem đối tượng.