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


sp_pkeys (Transact-SQL)

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

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

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

Синтаксис

Синтаксис для SQL Server, База данных SQL Azure, Azure Synapse Analytics, система платформы аналитики (PDW).

sp_pkeys
    [ @table_name = ] N'table_name'
    [ , [ @table_owner = ] N'table_owner' ]
    [ , [ @table_qualifier = ] N'table_qualifier' ]
[ ; ]

Аргументы

[ @table_name = ] N'table_name'

Указывает таблицу, для которой возвращаются сведения. @table_name — sysname без значения по умолчанию. Сопоставление шаблонов подстановочных знаков не поддерживается.

[ @table_owner = ] N'table_owner'

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

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

[ @table_qualifier = ] N'table_qualifier'

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

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

Нет.

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

Имя столбца Тип данных Description
TABLE_QUALIFIER sysname Имя квалификатора таблицы. Это поле может быть NULL.
TABLE_OWNER sysname Имя владельца таблицы. Это поле всегда возвращает значение.
TABLE_NAME sysname Имя таблицы. В SQL Server этот столбец представляет имя таблицы, как указано в таблице sysobjects. Это поле всегда возвращает значение.
COLUMN_NAME sysname Имя столбца для каждого столбца возвращаемого TABLE_NAME столбца. В SQL Server этот столбец представляет имя столбца, как указано в sys.columns таблице. Это поле всегда возвращает значение.
KEY_SEQ smallint Порядковый номер столбца в первичном ключе, состоящем из нескольких столбцов.
PK_NAME sysname Идентификатор первичного ключа. Возвращается NULL , если не применимо к источнику данных.

Замечания

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

Хранимая sp_pkeys процедура эквивалентна SQLPrimaryKeys ODBC. Результаты упорядочены по TABLE_QUALIFIER, TABLE_OWNERи TABLE_NAMEKEY_SEQ.

Разрешения

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

Примеры

Примеры кода Transact-SQL в этой статье используют AdventureWorks2022 базу данных или AdventureWorksDW2022 пример базы данных, которую можно скачать с домашней страницы примеров и проектов сообщества Microsoft SQL Server.

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

USE AdventureWorks2022;
GO

EXEC sp_pkeys @table_name = N'Department',
    @table_owner = N'HumanResources';

Примеры: Azure Synapse Analytics и система платформы аналитики (PDW)

В следующем примере возвращается первичный ключ таблицы DimAccount в базе данных AdventureWorksPDW2012. Он возвращает нулевые строки, указывающие, что в таблице нет первичного ключа.

-- Uses AdventureWorksPDW

EXEC sp_pkeys @table_name = N'DimAccount';