Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Överensstämmelse
Version introducerad: ODBC 1.0 Standardefterlevnad: ODBC
Summary
SQLPrimaryKeys returnerar kolumnnamnen som utgör primärnyckeln för en tabell. Drivrutinen returnerar informationen som en resultatuppsättning. Denna funktion stöder inte att returnera primärnycklar från flera tabeller i ett enda anrop.
Syntax
SQLRETURN SQLPrimaryKeys(
SQLHSTMT StatementHandle,
SQLCHAR * CatalogName,
SQLSMALLINT NameLength1,
SQLCHAR * SchemaName,
SQLSMALLINT NameLength2,
SQLCHAR * TableName,
SQLSMALLINT NameLength3);
Arguments
StatementHandle
[Indata] Instruktionshandtag.
CatalogName
[Indata] Katalognamn. Om en drivrutin stödjer kataloger för vissa tabeller men inte för andra, till exempel när drivrutinen hämtar data från olika databaser, betecknar en tom sträng ("") de tabeller som inte har kataloger.
CatalogName kan inte innehålla ett strängsökningsmönster.
Om attributet SQL_ATTR_METADATA_ID sats sätts till SQL_TRUE behandlas CatalogName som en identifierare och dess fall är inte signifikant. Om det är SQL_FALSE är CatalogName ett vanligt argument; Den behandlas bokstavligt, och dess fall är betydelsefullt. Mer information finns i Argument i Katalogfunktioner.
NameLength1
[Input] Längd i tecken i *CatalogName.
Schema-namn
[Indata] Schemanamn. Om en drivrutin stöder scheman för vissa tabeller men inte för andra, till exempel när drivrutinen hämtar data från olika databassystem, betecknar en tom sträng ("") de tabeller som inte har scheman.
SchemaName kan inte innehålla ett strängsökningsmönster.
Om attributet SQL_ATTR_METADATA_ID är satt till SQL_TRUE behandlas SchemaName som en identifierare och dess fall är inte signifikant. Om det är SQL_FALSE är SchemaName ett vanligt argument; Det behandlas bokstavligt, och dess fall är inte betydelsefullt.
NameLength2
[Input] Längd i tecken i *SchemaName.
TableName
[Indata] Tabellnamn. Detta argument kan inte vara en nollpekare.
TableName kan inte innehålla ett strängsökningsmönster.
Om attributet SQL_ATTR_METADATA_ID sats sätts till SQL_TRUE behandlas TableName som en identifierare och dess fall är inte signifikant. Om det är SQL_FALSE är TableName ett vanligt argument; Det behandlas bokstavligt, och dess fall är inte betydelsefullt.
NameLength3
[Input] Längd i tecken av *TableName.
Returns
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_ERROR eller SQL_INVALID_HANDLE.
Diagnostics
När SQLPrimaryKeys returnerar SQL_ERROR eller SQL_SUCCESS_WITH_INFO kan ett associerat SQLSTATE-värde erhållas genom att anropa SQLGetDiagRec med en HandleType av SQL_HANDLE_STMT och ett Handle av StatementHandle. Följande tabell listar de SQLSTATE-värden som vanligtvis returneras av SQLPrimaryKeys och förklarar var och en i kontexten av denna funktion; notationen "(DM)" föregår beskrivningarna av SQLSTATE som returneras av Driver Manager. Returkoden som är associerad med varje SQLSTATE-värde är SQL_ERROR, om inget annat anges.
| SQLSTATE | Error | Beskrivning |
|---|---|---|
| 01000 | Allmän varning | Informationsmeddelande för drivrutinsspecifikt. (Funktionen returnerar SQL_SUCCESS_WITH_INFO.) |
| 08S01 | Kommunikationslänkfel | Kommunikationslänken mellan drivrutinen och datakällan som drivrutinen var ansluten till misslyckades innan funktionen slutförde bearbetningen. |
| 24000 | Ogiltigt markörtillstånd | (DM) En markör var öppen på StatementHandle, och SQLFetch eller SQLFetchScroll hade anropats. En markör var öppen på StatementHandle, men SQLFetch eller SQLFetchScroll hade inte anropats. |
| 40001 | Serialiseringsfel | Transaktionen återställdes på grund av ett resursstopp med en annan transaktion. |
| 40003 | Slutförande av instruktion okänd | Den associerade anslutningen misslyckades under körningen av den här funktionen och transaktionens tillstånd kan inte fastställas. |
| HY000 | Allmänt fel | Ett fel uppstod för vilket det inte fanns någon specifik SQLSTATE och för vilken ingen implementeringsspecifik SQLSTATE definierades. Felmeddelandet som returnerades av SQLGetDiagRec i *MessageText-bufferten beskriver felet och dess orsak. |
| HY001 | Fel vid minnesallokering | Drivrutinen kunde inte allokera minne som krävs för körning eller slutförande av funktionen. |
| HY008 | Åtgärden avbröts | Asynkron bearbetning aktiverades för StatementHandle. Funktionen anropades och innan körningen slutfördes anropades SQLCancel eller SQLCancelHandle på StatementHandle. Sedan anropades funktionen igen på StatementHandle. Funktionen anropades och innan körningen slutfördes anropades SQLCancel eller SQLCancelHandle på StatementHandle från en annan tråd i ett flertrådsprogram. |
| HY009 | Ogiltig användning av null-pekare | (DM) TableName-argumentet var en nullpekare. Attributet SQL_ATTR_METADATA_ID satsen sattes till SQL_TRUE, argumentet CatalogName var en nullpekare, och SQLGetInfo med den SQL_CATALOG_NAME informationstypen visar att katalognamn stöds. (DM) Attributet SQL_ATTR_METADATA_ID sats sattes till SQL_TRUE, och SchemaName-argumentet var en nullpekare. |
| HY010 | Funktionssekvensfel | (DM) En asynkront körande funktion anropades för anslutningshandtaget som är associerat med StatementHandle. Denna asynkrona funktion kördes fortfarande när SQLPrimaryKeys-funktionen anropades. (DM) SQLExecute, SQLExecDirect eller SQLMoreResults anropades för StatementHandle och returnerades SQL_PARAM_DATA_AVAILABLE. Den här funktionen anropades innan data hämtades för alla strömmade parametrar. (DM) En asynkront körande funktion (inte den här) anropades för StatementHandle och kördes fortfarande när den här funktionen anropades. (DM) SQLExecute, SQLExecDirect, SQLBulkOperations eller SQLSetPos anropades för StatementHandle och returnerades SQL_NEED_DATA. Den här funktionen anropades innan data skickades för alla data-at-execution-parametrar eller kolumner. |
| HY013 | Minneshanteringsfel | Det gick inte att bearbeta funktionsanropet eftersom det inte gick att komma åt underliggande minnesobjekt, möjligen på grund av minnesbrist. |
| HY090 | Ogiltig sträng- eller buffertlängd | (DM) Värdet på ett av namnlängdsargumenten var mindre än 0 men inte lika med SQL_NTS, och det associerade namnargumentet är inte en nullpekare. Värdet för ett av argumenten för namnlängd överskred det maximala längdvärdet för motsvarande namn. |
| HY117 | Anslutningen pausas på grund av okänt transaktionstillstånd. Endast frånkopplings- och skrivskyddade funktioner tillåts. | (DM) Mer information om pausat tillstånd finns i SQLEndTran-funktion. |
| HYC00 | Valfri funktion har inte implementerats | En katalog specificerades, och drivrutinen eller datakällan stöder inte kataloger. Ett schema specificerades och drivrutinen eller datakällan stöder inte scheman. Kombinationen av de aktuella inställningarna för SQL_ATTR_CONCURRENCY- och SQL_ATTR_CURSOR_TYPE-instruktionsattributen stöds inte av drivrutinen eller datakällan. SQL_ATTR_USE_BOOKMARKS-instruktionsattributet har angetts till SQL_UB_VARIABLE och SQL_ATTR_CURSOR_TYPE-instruktionsattributet har angetts till en markörtyp som drivrutinen inte stöder bokmärken för. |
| HYT00 | Tidsgränsen har upphört att gälla | Tidsavslutningsperioden gick ut innan datakällan returnerade den begärda resultatuppsättningen. Tidsgränsen anges via SQLSetStmtAttr, SQL_ATTR_QUERY_TIMEOUT. |
| HYT01 | Tidsgränsen för anslutningen gick ut | Tidsgränsen för anslutningen löpte ut innan datakällan svarade på begäran. Tidsgränsen för anslutningen anges via SQLSetConnectAttr, SQL_ATTR_CONNECTION_TIMEOUT. |
| IM001 | Drivrutinen stöder inte den här funktionen | (DM) Drivrutinen som är associerad med StatementHandle stöder inte funktionen. |
| IM017 | Avsökning är inaktiverat i asynkront meddelandeläge | När meddelandemodellen används inaktiveras avsökningen. |
| IM018 | SQLCompleteAsync har inte anropats för att slutföra den tidigare asynkrona åtgärden på det här handtaget. | Om det tidigare funktionsanropet på handtaget returnerar SQL_STILL_EXECUTING och om meddelandeläget är aktiverat måste SQLCompleteAsync anropas på handtaget för att utföra efterbearbetningen och slutföra åtgärden. |
Comments
SQLPrimaryKeys returnerar resultaten som en standardmängd resultat, ordnade efter TABLE_CAT, TABLE_SCHEM, TABLE_NAME och KEY_SEQ. Information om hur den här informationen kan användas finns i Användning av katalogdata.
Följande kolumner har bytt namn till ODBC 3. x. Kolumnnamnsändringarna påverkar inte bakåtkompatibilitet eftersom applikationer binds efter kolumnnummer.
| ODBC 2.0-kolumn | ODBC 3. X-kolumnen |
|---|---|
| TABLE_QUALIFIER | TABLE_CAT |
| TABELLÄGARE | TABELL_SCHEMA |
För att bestämma de faktiska längderna på kolumnerna TABLE_CAT, TABLE_SCHEM, TABLE_NAME och COLUMN_NAME, anropa SQLGetInfo med alternativen SQL_MAX_CATALOG_NAME_LEN, SQL_MAX_SCHEMA_NAME_LEN, SQL_MAX_TABLE_NAME_LEN och SQL_MAX_COLUMN_NAME_LEN.
Note
Mer information om allmän användning, argument och returnerade data för ODBC-katalogfunktioner finns i Katalogfunktioner.
I följande tabell visas kolumnerna i resultatuppsättningen. Ytterligare kolumner bortom kolumn 6 (PK_NAME) kan definieras av drivrutinen. En applikation bör få tillgång till drivrutinsspecifika kolumner genom att räkna ner från slutet av resultatuppsättningen istället för att specificera en explicit ordinal position. Mer information finns i Data som returneras av katalogfunktioner.
| Kolumnnamn | Kolumnnummer | Datatyp | Comments |
|---|---|---|---|
| TABLE_CAT (ODBC 1.0) | 1 | Varchar | Primärnyckeltabellens katalognamn; NULL om det inte gäller datakällan. Om en drivrutin stödjer kataloger för vissa tabeller men inte för andra, till exempel när drivrutinen hämtar data från olika databaser, returnerar den en tom sträng ("") för de tabeller som inte har kataloger. |
| TABLE_SCHEM (ODBC 1.0) | 2 | Varchar | Primärnyckeltabellens schemanamn; NULL om det inte gäller datakällan. Om en drivrutin stödjer scheman för vissa tabeller men inte för andra, till exempel när drivrutinen hämtar data från olika databaser, returnerar den en tom sträng ("") för de tabeller som inte har scheman. |
| TABLE_NAME (ODBC 1.0) | 3 | Varchar inte NULL | Namn på primärnyckeltabell. |
| COLUMN_NAME (ODBC 1.0) | 4 | Varchar inte NULL | Primärnyckelns kolumnnamn. Drivrutinen returnerar en tom sträng för en kolumn som inte har något namn. |
| KEY_SEQ (ODBC 1.0) | 5 | Smallint, inte NULL | Kolumnsekvensnummer i nyckel (börjar på 1). |
| PK_NAME (ODBC 2.0) | 6 | Varchar | Primärnyckelnamn. NULL om det inte gäller datakällan. |
Kodexempel
Se SQLForeignKeys.
Relaterade funktioner
| Mer information om | Se |
|---|---|
| Binda en buffert till en kolumn i en resultatuppsättning | SQLBindCol-funktion |
| Avbryta instruktionsbearbetning | SQLCancel-funktion |
| Hämtar ett datablock eller bläddrar igenom en resultatuppsättning | SQLFetchScroll-funktion |
| Att hämta en enda rad eller ett datablock i en framåtriktad riktning | SQLFetch-funktion |
| Returnera kolumnerna i sekundärnycklar | SQLForeignKeys-funktion |
| Återlämnande tabellstatistik och index | SQLStatistikfunktion |