SQLPrimaryKeys - 获取表的主键列

用途

规范: DB2 CLI 2.1 ODBC 1.0

SQLPrimaryKeys() 返回由表的主键组成的列名的列表。此信息在 SQL 结果集中返回,可以使用用来处理查询生成的结果集的函数来检索此结果集。CatalogNameNameLength1SchemaNameNameLength2 被忽略。返回的结果集的第 1、2 和 6 列总是长度为零的字符串。

语法

SQLRETURN   SQLPrimaryKeys  (
                  SQLHSTMT          StatementHandle,  /* hstmt */
                  SQLCHAR      FAR  *CatalogName,     /* szCatalogName */
                  SQLSMALLINT       NameLength1,      /* cbCatalogName */
                  SQLCHAR      FAR  *SchemaName,      /* szSchemaName */
                  SQLSMALLINT       NameLength2,      /* cbSchemaName */
                  SQLCHAR      FAR  *TableName,       /* szTableName */
                  SQLSMALLINT       NameLength3);     /* cbTableName */
 

函数自变量

表 76. SQLPrimaryKeys 自变量

数据类型 自变量 使用 描述
SQLHSTMT StatementHandle 输入 语句句柄。
SQLCHAR* CatalogName 输入 表名(该表名由 3 个部分组成)的目录限定符。

DB2 Everyplace 忽略此字段。

SQLSMALLINT NameLength1 输入 CatalogName 的长度。DB2 Everyplace 忽略此字段。
SQLCHAR* SchemaName 输入 表名的模式限定符。DB2 Everyplace 忽略此字段。
SQLSMALLINT NameLength2 输入 SchemaName 的长度。DB2 Everyplace 忽略此字段。
SQLCHAR* TableName 输入 表名。
SQLSMALLINT NameLength3 输入 TableName 的长度。

用法

SQLPrimaryKeys() 返回单个表中的主键列。不能使用搜索模式来指定表名。

如果指定的表不包含主键,则返回空的结果集。

SQLPrimaryKeys() 的调用在许多情况下都会映射至对系统目录的复杂且高成本的查询。

虽然可以添加新列,在将来的发行版中也可以更改现有列的名称,但当前列的位置不会改变。

结果集包含以下列,按 TABLE_NAME 和 ORDINAL_POSITION 排序:

第 1 列 TABLE_CAT (VARCHAR(128))
这始终是长度为零的字符串。

第 2 列 TABLE_SCHEM (VARCHAR(128))
这始终是长度为零的字符串。

第 3 列 TABLE_NAME (VARCHAR(128) not NULL)
指定的表的名称。

第 4 列 COLUMN_NAME (VARCHAR(128) not NULL)
主键列名。

第 5 列 ORDINAL_POSITION (SMALLINT not NULL)
主键中的列序号,从 1 开始。

第 6 列 PK_NAME (VARCHAR(128))
这始终是长度为零的字符串。

DB2 CLI/ODBC 使用的列名遵循 X/Open CLI CAE 规范样式。

返回码

诊断

表 77. SQLPrimaryKey SQLSTATE

SQLSTATE 描述 解释
24000 游标状态无效。 已在该语句句柄上打开了游标。
40003 08S01 通信链路故障。 函数尚未完成,应用程序与数据源间的通信链路就失效了。
HY001 内存分配失败。 DB2 CLI 无法分配支持函数的执行或完成所需的内存。
HY010 函数顺序错误。 执行“处理数据”的操作(SQLPrepare()SQLExecDirect())时调用了该函数。
HY014 不再有句柄。 因为内部资源问题,DB2 CLI 无法分配句柄。
HY090 字符串或缓冲区长度无效。 其中一个名称长度自变量的值小于 0,但不等于 SQL_NTS。

限制

不要经常调用 SQLPrimaryKeys(),保存结果而不是重复的调用。

相关参考