Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Обектът не можа да бъде пуснат, защото е препратен от ограничение ВЪНШЕН КЛЮЧ - SQL Server / TSQL Урок, част 74

Сценарий:

Вие работите като SQL Server DBA или разработчик, трябва да пуснете таблица от база данни. Когато изпълните оператор за пускане на таблица SchemaName.TableName, получавате грешка по-долу.

Съобщение 3726, ниво 16, състояние 1, ред 12
Не можа да пусне обект 'SchemaName.TableName', защото е препраща се от ограничение ВЪНШЕН КЛЮЧ.

Сега знаем, че таблицата се препраща от Ограничение на ВЪНШЕН КЛЮЧ. Проблемът е как да се намери коя таблица има това ограничение на външния ключ, което препраща към тази таблица.

Решение:

1) Има много начини да получите тази информация. Можем да използваме системни изгледи, за да намерим името на таблицата, която има ограничението на външния ключ, което препраща към нашата първична таблица.

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'
 
Изпълних горния скрипт за моята клиентска таблица, която присъства в dbo схемата и ето какво получих.
Как да разберете външния ключ на коя таблица се отнася към таблицата в SQL Server.


Сега знаем, че Ord е таблицата, която има ограничение на външния ключ, което препраща към нашата таблица. Можем да продължим и да пуснем ограничението на външния ключ и след това да пуснем нашата таблица.

2) Използвайте системно съхранена процедура sp_fkeys

Можем да използваме системна съхранена процедура, за да получим информацията за ограниченията на външния ключ, която се отнася до нашата таблица. Ако името ми на таблицата е Customer, мога да стартирам скрипт, както е показано по-долу
 
EXEC sp_fkeys 'Customer'
 
Как да получите име на ограничение на външния ключ за таблица в SQL Server
 sp_fkeys връща много подробна информация, някои от колоните не са показани в моментната снимка по-горе. ето списъка с колоните, които ще върне.


  • 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


Видео демонстрация:Обектът не можа да бъде пуснат, защото е препратен от ограничение на външния ключ



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да заменя няколко знака в SQL?

  2. Грешка в заявката с двусмислено име на колона в SQL

  3. SQL Server 2016:Създайте потребител на база данни

  4. Как да добавите първичен ключ към съществуваща таблица в SQL Server (T-SQL примери)

  5. Как да разположите приложение с база данни на sql сървър на клиенти