CString CTCDlg::QueryPrimaryKey(CString strDestTable)
{
SQLHENV     henv;
SQLRETURN   retcode;
SQLHDBC    hdbc;
SQLHSTMT    hstmt;
SQLCHAR    szPkCol[COL_LEN];
SQLINTEGER  cbPkCol;
CString strSQLQueryPK, PKColName;
LPSTR pSQLQueryPK; strSQLQueryPK.Format("sp_pkeys @table_name = 'JHMY.dbo.%s'",strDestTable);
pSQLQueryPK = strSQLQueryPK.GetBufferSetLength(strSQLQueryPK.GetLength());
//分配环境句柄
retcode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
//设置环境属性
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO) 
retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);
//分配连接句柄
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
//retcode = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT, 5, 0);
retcode = SQLConnect(hdbc, (SQLCHAR*) "JHMY", SQL_NTS,
                  (SQLCHAR*) "SA", SQL_NTS,
                  (SQLCHAR*) "", SQL_NTS);
//分配语句句柄
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
            retcode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
//执行SQL语句
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
retcode = SQLExecDirect(hstmt,(unsigned char*)pSQLQueryPK, SQL_NTS);
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO)
{
SQLBindCol(hstmt, 4, SQL_C_CHAR, szPkCol, COL_LEN, &cbPkCol);
SQLFetch(hstmt);
PKColName.Format((LPCTSTR)szPkCol);
}
SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
}
SQLDisconnect(hdbc);
}
SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
      
}
SQLFreeHandle(SQL_HANDLE_ENV, henv);
strSQLQueryPK.ReleaseBuffer();
return PKColName;
}
以上是例子,其实用SQLPrimaryKey()也可以。