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

Kiểm tra xem một Bảng có được tham chiếu bởi một khóa ngoại trong SQL Server với OBJECTPROPERTY () hay không

Bạn có thể sử dụng OBJECTPROPERTY() trong SQL Server để kiểm tra xem một bảng có được tham chiếu bởi 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à TableHasForeignRef như đối số thứ hai. Hàm trả về 1 hoặc 0 tùy thuộc vào việc nó có được tham chiếu bởi khóa ngoại hay không.

Giá trị trả về của 1 có nghĩa là bảng is được tham chiếu bởi khóa ngoại và giá trị 0 nghĩa là không phải vậy.

Lưu ý rằng các ví dụ được trình bày ở đây không liệt kê các khóa ngoại hoặc bảng của chúng hoặc bất cứ thứ gì tương tự. Chúng chỉ trả về một giá trị true / false mà bạn có thể sử dụng để kiểm tra xem bảng có được tham chiếu bởi khóa ngoại hay không. Nếu bạn cần liệt kê tất cả các khóa ngoại tham chiếu đến một bảng nhất định, hãy xem Trả lại tất cả các khóa ngoại tham chiếu đến một bảng đã cho trong SQL Server. Các ví dụ trong bài viết đó liệt kê từng khóa ngoại, cũng như / các bảng khóa ngoại và bảng khóa chính.

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(1141579105, 'TableHasForeignRef') AS [TableHasForeignRef];

Kết quả:

+----------------------+
| TableHasForeignRef   |
|----------------------|
| 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 tham chiếu bởi một 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('Dimension.City'), 'TableHasForeignRef') AS [TableHasForeignRef];

Kết quả:

+----------------------+
| TableHasForeignRef   |
|----------------------|
| 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('Dimension.City') AS [Object ID],
  OBJECTPROPERTY(OBJECT_ID('Dimension.City'), 'TableHasForeignRef') AS [TableHasForeignRef];

Kết quả:

+-------------+----------------------+
| Object ID   | TableHasForeignRef   |
|-------------+----------------------|
| 1013578649  | 1                    |
+-------------+----------------------+

Ví dụ 3 - Khi Bảng KHÔNG được tham chiếu bởi khóa ngoại

Đây là điều xảy ra khi bảng không được tham chiếu bởi khóa ngoại.

SELECT OBJECTPROPERTY(OBJECT_ID('Integration.Lineage'), 'TableHasForeignRef') AS [TableHasForeignRef];

Kết quả:

+----------------------+
| TableHasForeignRef   |
|----------------------|
| 0                    |
+----------------------+

Trong trường hợp này, đối tượng là một bảng, chỉ là nó không được tham chiếu bởi 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'), 'TableHasForeignRef') AS [TableHasForeignRef];

Kết quả:

+----------------------+
| TableHasForeignRef   |
|----------------------|
| 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'), 'TableHasForeignRef') AS [InvalidObject],
  OBJECTPROPERTY(12345678, 'TableHasForeignRef') 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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Hiểu Nhóm theo Mệnh đề trong SQL Server - Hướng dẫn SQL Server / TSQL Phần 130

  2. Cách tạo cơ sở dữ liệu trong SQL Server

  3. Cách lấy lại * mọi thứ * từ quy trình được lưu trữ bằng JDBC

  4. Nối nhiều hàng thành một chuỗi văn bản duy nhất bằng cách nhóm

  5. Làm cách nào để giữ một phiên bản kết nối SQL Server mở cho nhiều yêu cầu trong C #?