Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Nie można obciąć tabeli, ponieważ odwołuje się do niej ograniczenie klucza obcego — SQL Server/TSQL Tutorial, część 70

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
 
 Poniższy skrypt może zostać użyty do wygenerowania instrukcji drop Constraint dla Twojej tabeli

 
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
 Weź wynik dla Usuń ograniczenie klucza obcego i wykonaj. Następnie uruchom instrukcję truncate table, aby obciąć tabelę. Powinno zakończyć się bez żadnych błędów.


Prezentacja wideo :nie można obciąć tabeli, ponieważ odwołuje się do niej ograniczenie klucza OBCEGO


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zainstalować SQL Server w SUSE 12?

  2. SQL Server:Czy można wstawiać do dwóch tabel jednocześnie?

  3. Zapytanie SQL do wyboru dat między dwiema datami

  4. Jak włączyć ograniczenie klucza obcego w programie SQL Server (przykłady T-SQL)

  5. SQL Server uruchamiający monitorowanie zapytań