sql >> Databáze >  >> RDS >> Sqlserver

Objekt nelze zrušit, protože na něj odkazuje omezení FOREIGN KEY - SQL Server / Výukový program TSQL, část 74

Scénář:

Pracujete jako SQL Server DBA nebo vývojář, potřebujete vypustit tabulku z databáze. Když provedete příkaz zrušení tabulky SchemaName.TableName, dostanete pod chybu.

Msg 3726, Level 16, State 1, Line 12
Nelze zrušit objekt 'SchemaName.TableName', protože je odkazováno omezením FOREIGN KEY.

Nyní víme, že na tabulku odkazuje omezení cizího klíče. Problém je v tom, jak zjistit, která tabulka má omezení cizího klíče, které odkazuje na tuto tabulku.

Řešení:

1) Existuje mnoho způsobů, jak tyto informace získat. Můžeme použít systémové pohledy k nalezení názvu tabulky, která má omezení cizího klíče, které odkazuje na naši primární tabulku.

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'
 
Spustil jsem výše uvedený skript pro moji tabulku zákazníků, která je přítomná ve schématu dbo, a tady je to, co jsem dostal.
Jak zjistit, který cizí klíč tabulky odkazuje na tabulku na serveru SQL.


Nyní víme, že Ord je tabulka, která má omezení cizího klíče, které odkazuje na naši tabulku. Můžeme pokračovat a zahodit omezení cizího klíče a pak zahodit naši tabulku.

2) Použijte systémovou uloženou proceduru sp_fkeys

Můžeme použít systémovou uloženou proceduru k získání informací o omezeních cizího klíče, které odkazují na naši tabulku. Pokud je název mé tabulky Zákazník, mohu spustit skript, jak je uvedeno níže
 
EXEC sp_fkeys 'Customer'
 
Jak získat název omezení cizího klíče pro tabulku na serveru SQL
 Sp_fkeys vrací velmi podrobné informace, několik sloupců není zobrazeno na snímku výše. zde je seznam sloupců, které vrátí.


  • 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


Video ukázka:Objekt nelze zrušit, protože na něj odkazuje omezení cizího klíče



  1. 5 způsobů, jak zkontrolovat, zda tabulka v PostgreSQL existuje

  2. Regulární výrazy na serverech SQL Server?

  3. Jak nakonfigurovat SELinux pro PostgreSQL a TimescaleDB

  4. Indexy SQL Server – vzestupné nebo sestupné, jaký je v tom rozdíl?