sp_fkeys (Transact-SQL)

Применимо к:SQL ServerAzure SQL DatabaseAzure Sql Managed InstanceAzure Synapse Analytics AnalyticsPlatform System (PDW)Warehouse in Microsoft Fabric

Возвращает сведения о логическом внешнем ключе для текущей среды. Эта процедура показывает связь по внешнему ключу, включая отключенные внешние ключи.

Соглашения о синтаксисе Transact-SQL

Синтаксис

sp_fkeys [ @pktable_name = ] 'pktable_name'   
     [ , [ @pktable_owner = ] 'pktable_owner' ]   
     [ , [ @pktable_qualifier = ] 'pktable_qualifier' ]   
     { , [ @fktable_name = ] 'fktable_name' }   
     [ , [ @fktable_owner = ] 'fktable_owner' ]   
     [ , [ @fktable_qualifier = ] 'fktable_qualifier' ]  

Аргументы

[ ] @pktable_name='pktable_name'
Имя таблицы с первичным ключом, применяемое для возврата сведений о каталоге. pktable_name — sysname с значением NULL по умолчанию. Сопоставление по шаблону не поддерживается. Этот параметр или параметр fktable_name или оба параметра должны быть предоставлены.

[ ] @pktable_owner='pktable_owner'
Имя владельца таблицы (с первичным ключом), используемого для возврата сведений каталога. pktable_owner имеет имя sysname с значением NULL по умолчанию. Сопоставление по шаблону не поддерживается. Если pktable_owner не задано, применяются правила видимости таблиц по умолчанию для базовых СУБД.

В SQL Server, если текущий пользователь владеет таблицей с указанным именем, возвращаются столбцы этой таблицы. Если pktable_owner не указан, а текущий пользователь не владеет таблицей с указанным pktable_name, процедура ищет таблицу с указанным pktable_name владельцем базы данных. Если такая таблица существует, возвращаются ее столбцы.

[ @pktable_qualifier =] "pktable_qualifier"
Имя квалификатора таблицы (с первичным ключом). pktable_qualifier имеет имя sysname с значением NULL по умолчанию. Различные продукты СУБД поддерживают трехкомпонентное именование таблиц (qualifier.owner.name). В SQL Server квалификатор представляет имя базы данных. В некоторых СУБД он представляет имя сервера в среде базы данных, где находится таблица.

[ ] @fktable_name='fktable_name'
Имя таблицы (с внешним ключом), применяемое для возврата сведений о каталоге. fktable_name имеет имя sysname с значением NULL по умолчанию. Сопоставление по шаблону не поддерживается. Этот параметр или параметр pktable_name или оба параметра должны быть предоставлены.

[ @fktable_owner =] 'fktable_owner'
Имя владельца таблицы (с внешним ключом), применяемое для возврата сведений о каталоге. fktable_owner — sysname с значением NULL по умолчанию. Сопоставление по шаблону не поддерживается. Если fktable_owner не указано, применяются правила видимости таблиц по умолчанию для базовых СУБД.

В SQL Server, если текущий пользователь владеет таблицей с указанным именем, возвращаются столбцы этой таблицы. Если fktable_owner не указан, а текущий пользователь не владеет таблицей с указанным fktable_name, процедура ищет таблицу с указаннымfktable_name владельцем базы данных. Если такая таблица существует, возвращаются ее столбцы.

[ ] @fktable_qualifier= 'fktable_qualifier'
Имя квалификатора таблицы (с внешним ключом). fktable_qualifier имеет имя sysname с значением NULL по умолчанию. В SQL Server квалификатор представляет имя базы данных. В некоторых СУБД он представляет имя сервера в среде базы данных, где находится таблица.

Значения кода возврата

None

Результирующие наборы

Имя столбца Тип данных Описание:
PKTABLE_QUALIFIER sysname Имя квалификатора таблицы (с первичным ключом). Это поле может иметь значение NULL.
PKTABLE_OWNER sysname Имя владельца таблицы (с первичным ключом). Это поле всегда возвращает значение.
PKTABLE_NAME sysname Имя таблицы (с первичным ключом). Это поле всегда возвращает значение.
PKCOLUMN_NAME sysname Имя первичных ключевых столбцов для каждого столбца таблицы TABLE_NAME. Это поле всегда возвращает значение.
FKTABLE_QUALIFIER sysname Имя квалификатора таблицы (с внешним ключом). Это поле может иметь значение NULL.
FKTABLE_OWNER sysname Имя владельца таблицы (с внешним ключом). Это поле всегда возвращает значение.
FKTABLE_NAME sysname Имя таблицы (с внешним ключом). Это поле всегда возвращает значение.
FKCOLUMN_NAME sysname Имя внешнего ключевого столбца для каждого столбца таблицы TABLE_NAME. Это поле всегда возвращает значение.
KEY_SEQ smallint Порядковый номер столбца в первичном ключе, состоящем из нескольких столбцов. Это поле всегда возвращает значение.
UPDATE_RULE smallint Действие, совершаемое над внешним ключом, когда операция SQL является операцией обновления. Возможные значения:
0=CASCADE; каскадное изменение в соответствии с внешним ключом.
1=NO ACTION; отсутствие изменений при наличии внешнего ключа.
2 = задать значение NULL
3 = задать значение по умолчанию
DELETE_RULE smallint Действие, совершаемое над внешним ключом, когда операция SQL является операцией удаления. Возможные значения:
0=CASCADE; каскадное изменение в соответствии с внешним ключом.
1=NO ACTION; отсутствие изменений при наличии внешнего ключа.
2 = задать значение NULL
3 = задать значение по умолчанию
FK_NAME sysname Идентификатор внешнего ключа. Возвращает NULL, если не применим к источнику данных. SQL Server возвращает имя ограничения FOREIGN KEY.
PK_NAME sysname Идентификатор первичного ключа. Возвращает NULL, если не применим к источнику данных. SQL Server возвращает имя ограничения PRIMARY KEY.

Возвращаемые результаты упорядочены по FKTABLE_QUALIFIER, FKTABLE_OWNER, FKTABLE_NAME и KEY_SEQ.

Замечания

Кодирование приложения, в состав которого входят таблицы с отключенными внешними ключами, можно выполнять следующим образом.

  • Временно отключить проверку ограничений (ALTER TABLE NOCHECK или CREATE TABLE NOT FOR REPLICATION) при работе с таблицами, потом включить ее снова.

  • Использовать триггеры кода приложения для принудительного выполнения связей.

Если введено имя таблицы первичных ключей, а имя таблицы внешних ключей — NULL, то процедура sp_fkeys возвращает все таблицы, в которых есть внешний ключ к данной таблице. Если введено имя таблицы внешних ключей, а имя таблицы первичных ключей — NULL, то процедура sp_fkeys возвращает все таблицы, имеющие связь «первичный-внешний ключ» с внешними ключами в таблице внешних ключей.

Хранимая процедура sp_fkeys эквивалентна SQLForeignKeys в ODBC.

Разрешения

Требуется SELECT разрешение на схему.

Примеры

В приведенном ниже примере выводится список внешних ключей для таблицы HumanResources.Department базы данных AdventureWorks2022.

USE AdventureWorks2022;  
GO  
EXEC sp_fkeys @pktable_name = N'Department'  
    ,@pktable_owner = N'HumanResources';  

Примеры: Azure Synapse Analytics и система платформы аналитики (PDW)

В приведенном ниже примере выводится список внешних ключей для таблицы DimDate базы данных AdventureWorksPDW2012. Строки не возвращаются, так как Azure Synapse Analytics не поддерживает внешние ключи.

EXEC sp_fkeys @pktable_name = N'DimDate';  

См. также

Хранимые процедуры каталога (Transact-SQL)
Системные хранимые процедуры (Transact-SQL)
sp_pkeys (Transact-SQL)