Поделиться через


sp_fkeys (Transact-SQL)

Область применения: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure хранилище платформы Аналитики Azure Synapse Analytics (PDW) в Microsoft Fabric

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

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

Синтаксис

sp_fkeys
    [ [ @pktable_name = ] N'pktable_name' ]
    [ , [ @pktable_owner = ] N'pktable_owner' ]
    [ , [ @pktable_qualifier = ] N'pktable_qualifier' ]
    [ , [ @fktable_name = ] N'fktable_name' ]
    [ , [ @fktable_owner = ] N'fktable_owner' ]
    [ , [ @fktable_qualifier = ] N'fktable_qualifier' ]
[ ; ]

Аргументы

[ @pktable_name = ] N'pktable_name'

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

[ @pktable_owner = ] N'pktable_owner'

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

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

[ @pktable_qualifier = ] N'pktable_qualifier'

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

[ @fktable_name = ] N'fktable_name'

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

[ @fktable_owner = ] N'fktable_owner'

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

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

[ @fktable_qualifier = ] N'fktable_qualifier'

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

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

Нет.

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

Имя столбца Тип данных Description
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 = SET_NULL
3 = задать значение по умолчанию
DELETE_RULE smallint Действие, совершаемое над внешним ключом, когда операция SQL является операцией удаления. Возможные значения:
0 = CASCADE изменения внешнего ключа.
1 = NO ACTION изменяется, если внешний ключ присутствует.
2 = SET_NULL
3 = задать значение по умолчанию
FK_NAME sysname Идентификатор внешнего ключа. NULL Если это не применимо к источнику данных. SQL Server возвращает FOREIGN KEY имя ограничения.
PK_NAME sysname Идентификатор первичного ключа. NULL Если это не применимо к источнику данных. SQL Server возвращает PRIMARY KEY имя ограничения.

Возвращаемые результаты упорядочены по FKTABLE_QUALIFIER, FKTABLE_OWNERи FKTABLE_NAMEKEY_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';