请教如何获取数据库内一个表的主键列名?

时间:2022-12-16 07:40:24
      VC++2013MFC应用程序采用ADO方式链接 SQL Server2012数据库,链接已成!
    现在想获取一个给定表名的表的主键名称,在百度了一下大多建议“”利用sp_pkeys查询表的主键信息”。
/*****************以下为百度内容****************************************************************************************************/
     返回当前环境中单个表的主键信息,如果表是联合主键,则每一个主键列都会返回一列数据。

    语法:
     sp_pkeys [ @table_name = ] 'name'
     [ , [ @table_owner = ] 'owner' ] 
     [ , [ @table_qualifier = ] 'qualifier' ]


    参数说明:
    [ @table_name = ] 'name'--要查询的表名
    [ @table_owner = ] 'owner'--表的所有者

    返回列:
    TABLE_QUALIFIER--表限定符的名称,该字段可以为 NULL。
    TABLE_OWNER--表的所有者,该字段始终返回值。
    TABLE_NAME--表的名称,该字段始终返回值。
    COLUMN_NAME--表中主键列中每一列的列名,该字段始终返回值。
    KEY_SEQ--多列主键中每一列对应的序列号。
    PK_NAME--主键的名称。

    注意:
   1,sp_pkeys只能返回一个提定表的主键信息
    2,只有第一个参数@table_name是必须,其它两个参数可以不传值。

    示例代码:
   比如我们要查看表table1的主键名及所有的主键列
     sp_pkeys 'table1'
/*****************以上为百度内容****************************************************************************************************/


/*****************我自己写代码如下****************************************************************************************************/
        CDBMG mydb;
        mydb.ConnectDB();
        CString sSQL;
sSQL = _T("sp_pkeys 'HirePictures'");
try
{
mydb.m_pConnection->Execute((_bstr_t)sSQL, NULL, adCmdText);
}
catch (_com_error&e)
{
mydb.GetErrors(e);             //则捕获错误信息并显示。
}
       
      //获取主键列名代码如何写?

       mydb.UnConnectDB();
/*****************我自己写代码如上****************************************************************************************************/

编译通过,无错误!
请问各位高手,获取主键列名代码如何写?
先谢谢了!

7 个解决方案

#1


利用系统表sysobjects查询。
select * from sysobjects where parent_obj in (select id from sysobjects where name='表名') 
and xtype='pk'

#2


在查询分析器中查看返回了那些列,列名称是什么,根据列名称来读取,初学的话看下这个 例子

#3


 谢谢您的指点,
我将代码修改为:

CString sSQL;

sSQL = _T("select * from sysobjects where parent_obj in(select id from sysobjects where name = 'HirePictures') and xtype = 'pk'");

try
{
mydb.OpenRecordSet(sSQL);
 }
catch (_com_error&e)
{
mydb.GetErrors(e);             //则捕获错误信息并显示。

}

short sI = mydb.GetFieldsCount();
CString sTemp = _T("");
sTemp= mydb.GetFieldValue(0);
        
        mydb.UnConnectDB();


代码执行后,读出的字段名和字段值都没有我要信息———表HirePictures的主键列名

还请不吝赐教! 请教如何获取数据库内一个表的主键列名?请教如何获取数据库内一个表的主键列名?请教如何获取数据库内一个表的主键列名?

#4


引用 3 楼 goldappleit 的回复:
 谢谢您的指点,
我将代码修改为:

CString sSQL;

sSQL = _T("select * from sysobjects where parent_obj in(select id from sysobjects where name = 'HirePictures') and xtype = 'pk'");

try
{
mydb.OpenRecordSet(sSQL);
 }
catch (_com_error&e)
{
mydb.GetErrors(e);             //则捕获错误信息并显示。

}

short sI = mydb.GetFieldsCount();
CString sTemp = _T("");
sTemp= mydb.GetFieldValue(0);
        
        mydb.UnConnectDB();


代码执行后,读出的字段名和字段值都没有我要信息———表HirePictures的主键列名

还请不吝赐教! 请教如何获取数据库内一个表的主键列名?请教如何获取数据库内一个表的主键列名?请教如何获取数据库内一个表的主键列名?


先在SQL Server的查询分析器来查询看看。

#5


键名的话 用 GetFieldInfo

#6


请教如何获取数据库内一个表的主键列名?

这是我要查询的表:
请教如何获取数据库内一个表的主键列名?

#7


自己搞定了 请教如何获取数据库内一个表的主键列名?
使用语句
SELECT TABLE_NAME, COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_NAME = '表名'

查到的第一个字段为表名,第二个字段为主键字段名!
非常感谢大家的帮助!尤其感谢zyq5945版主,提醒我使用了查询分析器,使问题最终得到解决!

#1


利用系统表sysobjects查询。
select * from sysobjects where parent_obj in (select id from sysobjects where name='表名') 
and xtype='pk'

#2


在查询分析器中查看返回了那些列,列名称是什么,根据列名称来读取,初学的话看下这个 例子

#3


 谢谢您的指点,
我将代码修改为:

CString sSQL;

sSQL = _T("select * from sysobjects where parent_obj in(select id from sysobjects where name = 'HirePictures') and xtype = 'pk'");

try
{
mydb.OpenRecordSet(sSQL);
 }
catch (_com_error&e)
{
mydb.GetErrors(e);             //则捕获错误信息并显示。

}

short sI = mydb.GetFieldsCount();
CString sTemp = _T("");
sTemp= mydb.GetFieldValue(0);
        
        mydb.UnConnectDB();


代码执行后,读出的字段名和字段值都没有我要信息———表HirePictures的主键列名

还请不吝赐教! 请教如何获取数据库内一个表的主键列名?请教如何获取数据库内一个表的主键列名?请教如何获取数据库内一个表的主键列名?

#4


引用 3 楼 goldappleit 的回复:
 谢谢您的指点,
我将代码修改为:

CString sSQL;

sSQL = _T("select * from sysobjects where parent_obj in(select id from sysobjects where name = 'HirePictures') and xtype = 'pk'");

try
{
mydb.OpenRecordSet(sSQL);
 }
catch (_com_error&e)
{
mydb.GetErrors(e);             //则捕获错误信息并显示。

}

short sI = mydb.GetFieldsCount();
CString sTemp = _T("");
sTemp= mydb.GetFieldValue(0);
        
        mydb.UnConnectDB();


代码执行后,读出的字段名和字段值都没有我要信息———表HirePictures的主键列名

还请不吝赐教! 请教如何获取数据库内一个表的主键列名?请教如何获取数据库内一个表的主键列名?请教如何获取数据库内一个表的主键列名?


先在SQL Server的查询分析器来查询看看。

#5


键名的话 用 GetFieldInfo

#6


请教如何获取数据库内一个表的主键列名?

这是我要查询的表:
请教如何获取数据库内一个表的主键列名?

#7


自己搞定了 请教如何获取数据库内一个表的主键列名?
使用语句
SELECT TABLE_NAME, COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_NAME = '表名'

查到的第一个字段为表名,第二个字段为主键字段名!
非常感谢大家的帮助!尤其感谢zyq5945版主,提醒我使用了查询分析器,使问题最终得到解决!