Scenarie:
Du skal afkorte en tabel, men når du forsøger at udføre, afkort tabel tabelnavn. Du får fejlen under.Besked 4712, niveau 16, tilstand 1, linje 43
Kan ikke afkorte tabellen 'SchemaName.TableName', fordi den refereres af en FOREIGN KEY-begrænsning.
Hvordan vil du afkorte denne tabel?
Løsning:
Som tabellen er involveret i Foreign Key-forholdet, skal du først droppe den fremmede nøgle-begrænsning og derefter udføre trunkeringstabelsætningen.Lad os demonstrere dette eksempel, jeg vil oprette to tabeller dbo.Customer og dbo.Orders og opret derefter Foreign Key Constraint på en af kolonnerne i Dbo.Orders til dbo.Customer-tabellen.
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)Hvis jeg nu prøver at afkorte dbo.Orders-tabellen, vil den ikke give nogen fejl. Men når jeg forsøger at afkorte dbo.Customer-tabellen, vil den give fejl, da dbo.Customer er begyndelsesreferencer af Foreign Key Constraint.
Sådan afkortes en tabel, som refereres af Foreign Key Constraint i SQL Server |
Vi kan droppe begrænsningen indtil videre, afkorte tabellen og derefter genskabe begrænsning af fremmednøgle.
For at finde begrænsningerne for fremmednøgle på en tabel kan du bruge sætningen nedenfor.
SELECT * FROM sys.foreign_keys WHERE referenced_object_id = object_id('dbo.Customer')
Sådan får du et begrænsningsnavn fra systemtabeller i 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')
Sådan slipper du udenlandsk nøglebegrænsning på tabel i SQL Server |
Videodemo :Kan ikke afkorte tabellen, fordi den refereres af en FOREIGN KEY-begrænsning