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

Không thể thả đối tượng vì nó được tham chiếu bởi ràng buộc NGOẠI KHÓA - Hướng dẫn SQL Server / TSQL Phần 74

Tình huống:

Bạn đang làm việc với tư cách là Nhà phát triển hoặc DBA của SQL Server, Bạn cần xóa một bảng khỏi cơ sở dữ liệu. Khi bạn thực hiện câu lệnh drop table SchemaName.TableName, bạn gặp lỗi dưới đây.

Msg 3726, Level 16, State 1, Line 12
Không thể thả đối tượng 'SchemaName.TableName' vì nó là được tham chiếu bởi ràng buộc NGOẠI KHÓA.

Bây giờ chúng ta biết rằng bảng được tham chiếu bởi Ràng buộc khóa ngoại. Vấn đề là làm thế nào để tìm bảng nào có Ràng buộc khóa ngoại đang tham chiếu đến bảng này.

Giải pháp:

1) Có nhiều cách để lấy thông tin này. Chúng tôi có thể sử dụng các dạng xem hệ thống để tìm tên của bảng có Ràng buộc khóa ngoại đang tham chiếu đến Bảng chính của chúng tôi.

SELECT Schema_Name(Schema_id) as TableSchemaName,
  object_name(FK.parent_object_id) ParentTableName,
  object_name(FK.referenced_object_id) ReferenceTableName
       FROM sys.foreign_keys AS FK
       WHERE object_name(FK.referenced_object_id)='YourTableName'
       and Schema_Name(Schema_id)='YourTableSchemaName'
 
Tôi đã thực thi tập lệnh trên cho bảng khách hàng của mình, bảng này có trong lược đồ dbo và đây là những gì tôi nhận được.
Cách tìm Khóa ngoại của bảng nào đang tham chiếu đến Bảng trong SQL Server.


Bây giờ chúng ta biết rằng Ord là bảng có Ràng buộc khóa ngoại đang tham chiếu đến bảng của chúng ta. Chúng ta có thể tiếp tục và bỏ Ràng buộc khóa ngoại và sau đó thả bảng của chúng ta.

2) Sử dụng Quy trình lưu trữ hệ thống sp_fkeys

Chúng ta có thể sử dụng Quy trình đã lưu trữ của hệ thống để lấy thông tin Ràng buộc Khoá ngoại đang tham chiếu đến bảng của chúng ta. Nếu tên bảng của tôi là Khách hàng, tôi có thể chạy tập lệnh như bên dưới
 
EXEC sp_fkeys 'Customer'
 
Cách lấy tên Ràng buộc khóa ngoại cho một bảng trong SQL Server
 Các sp_fkeys trả về thông tin rất chi tiết, một số cột không được hiển thị trong ảnh chụp nhanh ở trên. đây là danh sách các cột mà nó sẽ trả về. 


  • PKTABLE_QUALIFIER
  • PKTABLE_OWNER
  • PKTABLE_NAME
  • PKCOLUMN_NAME
  • FKTABLE_QUALIFIER
  • FKTABLE_OWNER
  • FKTABLE_NAME
  • FKCOLUMN_NAME
  • KEY_SEQ
  • UPDATE_RULE
  • DELETE_RULE
  • FK_NAME
  • PK_NAME


Video Demo:Không thể thả đối tượng vì nó được tham chiếu bởi Ràng buộc khóa ngoại



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chuyển đổi hàng thành cột bằng cách sử dụng 'Pivot' trong SQL Server

  2. Sự khác biệt giữa sys.objects, sys.system_objects và sys.all_objects trong SQL Server

  3. Làm cách nào để chọn ngày đầu tiên của tháng trong SQL?

  4. Cách chuyển đổi số nguyên thành số thập phân trong SQL Server

  5. Sử dụng DATABASEPROPERTYEX () để trả lại cài đặt cơ sở dữ liệu trong SQL Server