Scenariusz:
Musisz skrócić tabelę, ale gdy spróbujesz wykonać skróć tabelę nazwa_tabeli. Pojawia się błąd poniżej.Msg 4712, Level 16, State 1, Line 43
Nie można skrócić tabeli „SchemaName.TableName”, ponieważ odwołuje się do niej ograniczenie FOREIGN KEY.
Jak skróciłbyś tę tabelę?
Rozwiązanie:
Ponieważ tabela jest zaangażowana w relację klucza obcego, musisz najpierw usunąć ograniczenie klucza obcego, a następnie wykonać instrukcję truncate table.Zademonstrujmy ten przykład, zamierzam utworzyć dwie tabele dbo.Klient i dbo.Orders, a następnie utwórz ograniczenie klucza obcego w jednej z kolumn Dbo.Orders do tabeli 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)Teraz, jeśli spróbuję obciąć tabelę dbo.Orders, nie spowoduje to błędu. Ale kiedy próbuję obciąć tabelę dbo.Customer, zgłosi błąd, ponieważ dbo.Customer rozpoczyna odwołania od ograniczenia klucza obcego.
Jak obciąć tabelę, do której odwołuje się ograniczenie klucza obcego w SQL Server |
Możemy na razie usunąć ograniczenie, obciąć tabelę, a następnie odtworzyć ograniczenie klucza obcego.
Aby znaleźć ograniczenia klucza obcego w tabeli, możesz użyć poniższej instrukcji.
SELECT * FROM sys.foreign_keys WHERE referenced_object_id = object_id('dbo.Customer')
Jak uzyskać nazwę ograniczenia z tabel systemowych w 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')
Jak usunąć ograniczenie klucza obcego do tabeli w SQL Server |
Prezentacja wideo :nie można obciąć tabeli, ponieważ odwołuje się do niej ograniczenie klucza OBCEGO