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; отсутствие изменений при наличии внешнего ключа.

DELETE_RULE

smallint

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

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

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

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 эквивалентна ODBC-функции SQLForeignKeys.

Разрешения

Необходимо разрешение SELECT для схемы.

Примеры

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

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