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; ">
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 |
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 |
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