现在想获取一个给定表名的表的主键名称,在百度了一下大多建议“”利用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'
#3
谢谢您的指点,
我将代码修改为:
代码执行后,读出的字段名和字段值都没有我要信息———表HirePictures的主键列名
还请不吝赐教!
我将代码修改为:
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
先在SQL Server的查询分析器来查询看看。
#5
键名的话 用 GetFieldInfo
#6
这是我要查询的表:
#7
自己搞定了
使用语句
查到的第一个字段为表名,第二个字段为主键字段名!
非常感谢大家的帮助!尤其感谢zyq5945版主,提醒我使用了查询分析器,使问题最终得到解决!
使用语句
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
谢谢您的指点,
我将代码修改为:
代码执行后,读出的字段名和字段值都没有我要信息———表HirePictures的主键列名
还请不吝赐教!
我将代码修改为:
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
先在SQL Server的查询分析器来查询看看。
#5
键名的话 用 GetFieldInfo
#6
这是我要查询的表:
#7
自己搞定了
使用语句
查到的第一个字段为表名,第二个字段为主键字段名!
非常感谢大家的帮助!尤其感谢zyq5945版主,提醒我使用了查询分析器,使问题最终得到解决!
使用语句
SELECT TABLE_NAME, COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_NAME = '表名'
查到的第一个字段为表名,第二个字段为主键字段名!
非常感谢大家的帮助!尤其感谢zyq5945版主,提醒我使用了查询分析器,使问题最终得到解决!