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_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';