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

Nie można upuścić obiektu, ponieważ odwołuje się do niego ograniczenie KLUCZA OBCEGO — samouczek SQL Server / TSQL, część 74

Scenariusz:

Pracujesz jako SQL Server DBA lub programista. Musisz usunąć tabelę z bazy danych. Po wykonaniu instrukcji drop table SchemaName.TableName pojawia się błąd poniżej.

Msg 3726, Level 16, State 1, Line 12
Nie można usunąć obiektu 'SchemaName.TableName', ponieważ jest do którego odwołuje się ograniczenie klucza obcego.

Teraz wiemy, że do tabeli odwołuje się ograniczenie klucza obcego. Problem polega na tym, jak znaleźć, która tabela ma to ograniczenie klucza obcego, które odwołuje się do tej tabeli.

Rozwiązanie:

1) Istnieje wiele sposobów na uzyskanie tych informacji. Możemy użyć widoków systemowych, aby znaleźć nazwę tabeli, która ma ograniczenie klucza obcego, która odwołuje się do naszej tabeli podstawowej.

SELECT Schema_Name(Schema_id) as TableSchemaName,
  object_name(FK.parent_object_id) ParentTableName,
  object_name(FK.referenced_object_id) ReferenceTableName
       FROM sys.foreign_keys AS FK
       WHERE object_name(FK.referenced_object_id)='YourTableName'
       and Schema_Name(Schema_id)='YourTableSchemaName'
 
Wykonałem powyższy skrypt dla mojej tabeli klientów, która jest obecna w schemacie dbo i oto, co mam.
Jak znaleźć klucz obcy tabeli, który odwołuje się do tabeli w SQL Server.


Teraz wiemy, że Ord jest tabelą, która ma ograniczenie klucza obcego, które odwołuje się do naszej tabeli. Możemy iść dalej i usunąć ograniczenie klucza obcego, a następnie usunąć naszą tabelę.

2) Użyj procedury składowanej przez system sp_fkeys

Możemy użyć systemowej procedury składowanej, aby uzyskać informacje dotyczące ograniczeń klucza obcego, które odnoszą się do naszej tabeli. Jeśli moja nazwa tabeli to Klient, mogę uruchomić skrypt jak poniżej
 
EXEC sp_fkeys 'Customer'
 
Jak uzyskać nazwę ograniczenia klucza obcego dla tabeli w SQL Server
 Sp_fkeys zwraca bardzo szczegółowe informacje, kilka kolumn nie jest pokazanych na powyższym zrzucie. oto lista kolumn, które zostaną zwrócone.


  • PKTABLE_QUALIFIER
  • PKTABLE_OWNER
  • PKTABLE_NAME
  • PKCOLUMN_NAME
  • FKTABLE_QUALIFIER
  • FKTABLE_OWNER
  • FKTABLE_NAME
  • FKCOLUMN_NAME
  • KEY_SEQ
  • UPDATE_RULE
  • DELETE_RULE
  • FK_NAME
  • PK_NAME


Wideo demonstracyjne:nie można usunąć obiektu, ponieważ odwołuje się do niego 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. Spłaszczanie przecinających się przedziałów czasowych

  2. Błąd krytyczny:wywołanie niezdefiniowanej funkcji sqlsrv_connect()

  3. SQL INSERT INTO z wielu tabel

  4. czy możemy mieć klucz obcy, który nie jest kluczem podstawowym w żadnej innej tabeli?

  5. Użycie SqlParameter w klauzuli SQL LIKE nie działa