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


sp_fkeys (Transact-SQL)

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

Значок ссылки на разделСинтаксические обозначения в 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 квалификатор представляет собой имя базы данных. В некоторых СУБД он представляет имя сервера в среде базы данных, где находится таблица.

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

Нет

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

Имя столбца

Тип данных

Описание

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 является операцией обновления. SQL Server возвращает 0 или 1 для этих столбцов.

0=CASCADE; каскадное изменение в соответствии с внешним ключом.

1=NO ACTION; отсутствие изменений при наличии внешнего ключа.

2=SET_NULL; установка значения внешнего ключа в NULL.

DELETE_RULE

smallint

Действие, совершаемое над внешним ключом, когда операция SQL является операцией удаления. SQL Server возвращает 0 или 1 для этих столбцов.

0=CASCADE; каскадное изменение в соответствии с внешним ключом.

1=NO ACTION; отсутствие изменений при наличии внешнего ключа.

2=SET_NULL; установка значения внешнего ключа в NULL.

FK_NAME

sysname

Идентификатор внешнего ключа. Принимает значение NULL в случае неприменимости к источнику данных. SQL Server возвращает имя ограничения FOREIGN KEY.

PK_NAME

sysname

Идентификатор первичного ключа. Принимает значение NULL в случае неприменимости к источнику данных. SQL Server возвращает имя ограничения PRIMARY KEY.

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

Замечания

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

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

Хранимая процедура sp_fkeys равнозначна процедуре SQLForeignKeys в ODBC.

Разрешения

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

Примеры

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

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