Сценарий:
Вие работите като 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
Видео демонстрация:Обектът не можа да бъде пуснат, защото е препратен от ограничение на външния ключ