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

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

Tình huống:

Bạn cần cắt bớt một bảng nhưng khi bạn cố gắng thực hiện cắt ngắn table tableName. Bạn gặp lỗi bên dưới.

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

Bạn sẽ cắt bớt bảng này như thế nào?

Giải pháp:

Vì bảng tham gia vào mối quan hệ Khoá ngoại, trước tiên bạn cần bỏ ràng buộc khoá ngoại và sau đó thực hiện câu lệnh bảng cắt ngắn.

Hãy demo ví dụ này, tôi sẽ tạo hai bảng dbo. và dbo.Orders, sau đó tạo Ràng buộc khóa ngoài trên một trong các cột của bảng Dbo.Orders thành dbo.Customer.

USE YourDatabaseName
GO

CREATE TABLE dbo.Customer (
    Customerid INT PRIMARY KEY
    ,FName VARCHAR(100)
    ,LName VARCHAR(100)
    ,SSN VARCHAR(10)
    )

CREATE TABLE dbo.Orders (
    OrderId INT Identity(1, 1)
    ,OrderitemName VARCHAR(50)
    ,OrderItemAmt INT,
    CustomerId int
    )

--Create Foreign Key Constraint 
    Alter table dbo.Orders with Nocheck
    Add Constraint Fk_CustomerId  
    Foreign Key(CustomerId) References dbo.Customer(CustomerId)
 
 
 Bây giờ nếu tôi cố gắng cắt ngắn bảng dbo.Orders, nó sẽ không gặp lỗi. Nhưng khi tôi cố gắng cắt ngắn bảng dbo.Customer, nó sẽ xuất hiện lỗi là dbo. align:center; ">      Cách cắt ngắn một bảng được tham chiếu bởi Ràng buộc khóa ngoại trong SQL Server     
Bây giờ chúng ta có thể loại bỏ ràng buộc, cắt bớt bảng và sau đó tạo lại ràng buộc khóa ngoại.

Để tìm các ràng buộc khóa ngoại trên bảng, bạn có thể sử dụng câu lệnh dưới đây.

SELECT * 
FROM sys.foreign_keys
WHERE referenced_object_id = object_id('dbo.Customer')
 
 
Cách lấy tên Ràng buộc từ các bảng hệ thống trong SQL Server
 
 Tập lệnh dưới đây có thể được sử dụng để tạo câu lệnh Ràng buộc thả cho bảng của bạn 

 
SELECT 
    'ALTER TABLE ' 
    +  OBJECT_SCHEMA_NAME(parent_object_id) 
    +'.[' + OBJECT_NAME(parent_object_id) 
    +'] DROP CONSTRAINT ' 
    + name as DropFKConstraint
FROM sys.foreign_keys
WHERE referenced_object_id = object_id('dbo.Customer') 
 
 
Cách bỏ Ràng buộc khóa ngoại trên bảng trong SQL Server
 Lấy kết quả cho Drop Foreign Key Constraint và thực thi, Sau đó chạy câu lệnh bảng cắt ngắn của bạn để cắt ngắn bảng. Nó sẽ hoàn thành mà không có bất kỳ lỗi nào. 


Video Demo:Không thể cắt ngắn bảng vì nó đang được tham chiếu bởi ràng buộc NGOẠI KHÓA


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Có phải mọi người đều đang di chuyển đến đám mây?

  2. Xóa danh sách đăng nhập và mật khẩu đã nhớ trong SQL Server Management Studio

  3. Kết nối với máy chủ SQL với xác thực Windows từ máy Linux thông qua JDBC

  4. Truy vấn máy chủ SQL để lấy danh sách các cột trong bảng cùng với các ràng buộc Kiểu dữ liệu, KHÔNG ĐẦY ĐỦ và CHÍNH CHÍNH

  5. Cách APPROX_COUNT_DISTINCT () hoạt động trong SQL Server