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.
Замечания
Кодирование приложения, в состав которого входят таблицы с отключенными внешними ключами, можно выполнять следующим образом.
Временно отключить проверку ограничений (ALTER TABLE NOCHECK или CREATE TABLE NOT FOR REPLICATION) при работе с таблицами, потом включить ее снова.
Использовать триггеры кода приложения для принудительного выполнения связей.
Если введено имя таблицы первичных ключей, а имя таблицы внешних ключей — NULL, то процедура sp_fkeys возвращает все таблицы, в которых есть внешний ключ к данной таблице. Если введено имя таблицы внешних ключей, а имя таблицы первичных ключей — NULL, то процедура sp_fkeys возвращает все таблицы, имеющие связь «первичный-внешний ключ» с внешними ключами в таблице внешних ключей.
Хранимая процедура sp_fkeys эквивалентна ODBC-функции SQLForeignKeys.
Разрешения
Необходимо разрешение SELECT для схемы.
Примеры
В приведенном ниже примере выводится список внешних ключей для таблицы HumanResources.Department базы данных AdventureWorks2012.
USE AdventureWorks2012;
GO
EXEC sp_fkeys @pktable_name = N'Department'
,@pktable_owner = N'HumanResources';
См. также
Справочник
Хранимые процедуры каталога (Transact-SQL)