適用於:SQL Server
Azure SQL Database
Azure SQL 受控執行個體
Azure Synapse Analytics
Microsoft Fabric 中的倉儲
Microsoft Fabric 中的 SQL 資料庫
傳回目前環境中單一數據表的主鍵資訊。
Syntax
SQL Server、Azure SQL 資料庫和 Azure Synapse Analytics 的語法。
sys.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。 不支援通配符模式比對。 如果未 指定@table_owner ,則會套用基礎資料庫管理系統 (DBMS) 的預設數據表可見性規則。
在 SQL Server 中,如果目前用戶擁有具有指定名稱的數據表,則會傳回該數據表的數據行。 如果未指定@table_owner,而且目前用戶沒有擁有具有指定@table_name的數據表,則此程式會尋找具有資料庫擁有者所擁有之指定@table_name的數據表。 如果存在,則會傳回該數據表的數據行。
[ @table_qualifier = ] N'table_qualifier'
數據表限定符。
@table_qualifier為 sysname。 各種 DBMS 產品支援數據表的三部分命名(<qualifier>.<owner>.<name>)。 在 SQL Server 中,此資料行代表資料庫名稱。 在某些產品中,它代表數據表之資料庫環境的伺服器名稱。
傳回碼值
無。
結果集
| 資料行名稱 | 資料類型 | 描述 |
|---|---|---|
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_OWNERTABLE_NAME和 KEY_SEQ排序。
權限
SELECT需要架構的許可權。
範例
本文的程式碼範例使用AdventureWorks2025了 、 AdventureWorksDW2025或AdventureWorksLT2025範例資料庫,你可以從 Azure Data SQL 範例庫 GitHub 下載。
下列範例會擷 HumanResources.Department 取資料庫中數據表 AdventureWorks2025 的主鍵。
USE AdventureWorks2022;
GO
EXECUTE sp_pkeys
@table_name = N'Department',
@table_owner = N'HumanResources';
範例:Azure Synapse Analytics
下列範例會擷 DimAccount 取資料庫中數據表 AdventureWorksPDW2012 的主鍵。 它會傳回零個數據列,指出數據表沒有主鍵。
-- Uses AdventureWorksPDW
EXECUTE sp_pkeys @table_name = N'DimAccount';