规范: | DB2 CLI 2.1 | ODBC 1.0 |
|
SQLPrimaryKeys() 返回由表的主键组成的列名的列表。此信息在 SQL 结果集中返回,可以使用用来处理查询生成的结果集的函数来检索此结果集。CatalogName、NameLength1、SchemaName 和 NameLength2 被忽略。返回的结果集的第 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 */
函数自变量
数据类型 | 自变量 | 使用 | 描述 |
---|---|---|---|
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 排序:
DB2 CLI/ODBC 使用的列名遵循 X/Open CLI CAE 规范样式。
返回码
诊断
SQLSTATE | 描述 | 解释 |
---|---|---|
24000 | 游标状态无效。 | 已在该语句句柄上打开了游标。 |
40003 08S01 | 通信链路故障。 | 函数尚未完成,应用程序与数据源间的通信链路就失效了。 |
HY001 | 内存分配失败。 | DB2 CLI 无法分配支持函数的执行或完成所需的内存。 |
HY010 | 函数顺序错误。 | 执行“处理数据”的操作(SQLPrepare() 或 SQLExecDirect())时调用了该函数。 |
HY014 | 不再有句柄。 | 因为内部资源问题,DB2 CLI 无法分配句柄。 |
HY090 | 字符串或缓冲区长度无效。 | 其中一个名称长度自变量的值小于 0,但不等于 SQL_NTS。 |
限制
不要经常调用 SQLPrimaryKeys(),保存结果而不是重复的调用。
相关参考