Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Soulad
Představená verze: ODBC 1.0 Soulad standardů: Open Group
Summary
SQLSpecialColumns získává následující informace o sloupcích ve specifikované tabulce:
Optimální sada sloupců, která jednoznačně identifikuje řádek v tabulce.
Sloupce, které se automaticky aktualizují, když je jakákoli hodnota v řádku aktualizována transakcí.
Syntax
SQLRETURN SQLSpecialColumns(
SQLHSTMT StatementHandle,
SQLSMALLINT IdentifierType,
SQLCHAR * CatalogName,
SQLSMALLINT NameLength1,
SQLCHAR * SchemaName,
SQLSMALLINT NameLength2,
SQLCHAR * TableName,
SQLSMALLINT NameLength3,
SQLSMALLINT Scope,
SQLSMALLINT Nullable);
Arguments
StatementHandle
[Vstup] Popisovač příkazu
IdentifierType
[Vstup] Typ sloupce, který se vrací. Toto musí být jedna z následujících hodnot:
SQL_BEST_ROWID: Vrátí optimální sloupec nebo sadu sloupců, které získáním hodnot z tohoto sloupce nebo sloupců umožňují jednoznačnou identifikaci jakéhokoli řádku ve specifikované tabulce. Sloupec může být buď pseudosloupec speciálně navržený pro tento účel (například Oracle ROWID nebo Ingres TID), nebo sloupec či sloupce libovolného unikátního indexu tabulky.
SQL_ROWVER: Vrací sloupec nebo sloupce ve specifikované tabulce, pokud nějaké jsou, které jsou automaticky aktualizovány datovým zdrojem, když je jakákoli hodnota v řádku aktualizována jakoukoli transakcí (například v SQLBase ROWID nebo Sybase TIMESTAMP).
CatalogName
[Vstup] Katalogový název stolu. Pokud ovladač podporuje katalogy pro některé tabulky, ale ne pro jiné, například když ovladač získává data z různých DBMS, prázdný řetězec ("") označuje tabulky, které katalogy nemají.
CatalogName nemůže obsahovat vzor vyhledávání řetězců.
Pokud je atribut SQL_ATTR_METADATA_ID příkazu nastaven na SQL_TRUE, CatalogName je považován za identifikátor a jeho případ není významný. Pokud je to SQL_FALSE, CatalogName je běžný argument; Je brána doslovně a její případ je významný. Další informace naleznete v tématu Argumenty funkce katalogu.
NameLength1
[Vstup] Délka znaků *CatalogName.
Název schématu
[Vstup] Schéma pro stůl. Pokud ovladač podporuje schémata pro některé tabulky, ale ne pro jiné, například když ovladač získává data z různých DBMS, prázdný řetězec ("") označuje tabulky, které schémata nemají.
SchemaName nemůže obsahovat vzor vyhledávání řetězců.
Pokud je atribut SQL_ATTR_METADATA_ID příkazu nastaven na SQL_TRUE, SchemaName je považován za identifikátor a jeho případ není významný. Pokud je to SQL_FALSE, SchemaName je běžný argument; Je brána doslovně a její případ je významný.
NameLength2
[Vstup] Délka znaků *SchemaName.
TableName
[Vstup] Název tabulky Tento argument nemůže být nulovým ukazatelem.
TableName nemůže obsahovat vzor vyhledávání řetězců.
Pokud je atribut SQL_ATTR_METADATA_ID příkazu nastaven na SQL_TRUE, TableName je považován za identifikátor a jeho případ není významný. Pokud je to SQL_FALSE, TableName je běžný argument; Je brána doslovně a její případ je významný.
NameLength3
[Vstup] Délka znaků *TableName.
Scope
[Vstup] Minimální požadovaný rozsah rowid. Vrácený rowid může mít větší rozsah. Musí to být jedna z těchto věcí:
SQL_SCOPE_CURROW: Rowid je zaručeně platný pouze tehdy, když je umístěn v dané řadě. Pozdější opětovný výběr pomocí rowid nemusí vrátit řádek, pokud byl řádek aktualizován nebo smazán jinou transakcí.
SQL_SCOPE_TRANSACTION: Rowid je zaručeně platný po celou dobu trvání aktuální transakce.
SQL_SCOPE_SESSION: Rowid je zaručeně platný po celou dobu trvání relace (přes hranice transakcí).
Nullable
[Vstup] Určuje, zda vrátit speciální sloupce, které mohou mít hodnotu NULL. Musí to být jedna z těchto věcí:
SQL_NO_NULLS: Vylučujte speciální sloupce, které mohou mít hodnoty NULL. Některé ovladače nemohou podporovat SQL_NO_NULLS a pokud SQL_NO_NULLS bylo specifikováno, vrátí prázdnou sadu výsledků. Žádosti by měly být připraveny pro tento případ a žádat SQL_NO_NULLS pouze tehdy, pokud je to naprosto nezbytné.
SQL_NULLABLE: Vraťte speciální sloupce, i když mohou mít hodnoty NULL.
Returns
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_ERROR nebo SQL_INVALID_HANDLE.
Diagnostika
Když SQLSpecialColumns vrací SQL_ERROR nebo SQL_SUCCESS_WITH_INFO, lze získat přidruženou hodnotu SQLSTATE voláním SQLGetDiagRec s HandleType SQL_HANDLE_STMT a handleCommandHandle. Následující tabulka uvádí hodnoty SQLSTATE, které SQLSpecialColumns běžně vrací, a vysvětluje každou z nich v kontextu této funkce; notace "(DM)" předchází popisům SQLstavů vráceným Správcem ovladačů. Návratový kód přidružený ke každé hodnotě SQLSTATE je SQL_ERROR, pokud není uvedeno jinak.
| SQLSTATE | Error | Description |
|---|---|---|
| 01000 | Obecné upozornění | Informační zpráva specifická pro řidiče (Funkce vrátí SQL_SUCCESS_WITH_INFO.) |
| 08S01 | Selhání komunikačního propojení | Komunikační propojení mezi ovladačem a zdrojem dat, ke kterému byl ovladač připojen, selhalo před dokončením zpracování funkce. |
| 24000 | Neplatný stav kurzoru | Na StatementHandle byl otevřený kurzor a byly volány SQLFetch nebo SQLFetchScroll . Tuto chybu vrátí správce ovladačů, pokud SQLFetch nebo SQLFetchScroll nevrátil SQL_NO_DATA, a ovladač ji vrátí, pokud SQLFetch nebo SQLFetchScroll vrátily SQL_NO_DATA. Na StatementHandle byl otevřený kurzor, ale SQLFetch nebo SQLFetchScroll nebyly volány. |
| 40001 | Selhání serializace | Transakce byla vrácena zpět kvůli vzájemnému zablokování prostředku s jinou transakcí. |
| 40003 | Neznámé dokončování příkazů | Přidružené připojení se nezdařilo během provádění této funkce a stav transakce nelze určit. |
| HY000 | Obecná chyba | Došlo k chybě, pro kterou nebyla definována žádná specifická funkce SQLSTATE a pro kterou nebyla definována žádná implementace sqlSTATE. Chybová zpráva vrácená nástrojem SQLGetDiagRec v vyrovnávací paměti *MessageText popisuje chybu a její příčinu. |
| HY001 | Chyba přidělení paměti | Ovladač nemohl přidělit paměť potřebnou k podpoře provádění nebo dokončení funkce. |
| HY008 | Operace byla zrušena. | Asynchronní zpracování bylo povoleno pro StatementHandle. Funkce byla volána a před dokončením provádění byla volána funkce SQLCancel nebo SQLCancelHandle pro PříkazHandle. Pak byla funkce znovu volána v StatementHandle. Funkce byla volána a před dokončením provádění byla volána funkce SQLCancel neboSQLCancelHandlez jiného vlákna v aplikaci s více vlákny. |
| HY009 | Neplatné použití ukazatele null | Argument TableName byl ukazatel null. Atribut SQL_ATTR_METADATA_ID příkazu byl nastaven na SQL_TRUE, argument CatalogName byl nulový ukazatel a SQL_CATALOG_NAME InfoType vrací, že jsou podporována jména katalogů. (DM) Atribut SQL_ATTR_METADATA_ID příkazu byl nastaven na SQL_TRUE a argument SchemaName byl nulový ukazatel. |
| HY010 | Chyba posloupnosti funkcí | (DM) Byla volána asynchronně spuštěná funkce pro popisovač připojení, který je přidružen k StatementHandle. Tato funkce se stále vykonávala, když byl vyvolán SQLSpecialColumns . (DM) SQLExecute, SQLExecDirect nebo SQLMoreResults byl volána pro StatementHandle a vrácena SQL_PARAM_DATA_AVAILABLE. Tato funkce byla volána před načtením dat pro všechny streamované parametry. (DM) Pro PříkazHandle byla volána asynchronně spuštěná funkce (ne tato) a při zavolání této funkce se stále spouštěla. (DM) SQLExecute, SQLExecDirect, SQLBulkOperations nebo SQLSetPos byly volány pro StatementHandle a vráceny SQL_NEED_DATA. Tato funkce byla volána před odesláním dat pro všechny parametry provádění dat nebo sloupce. |
| HY013 | Chyba správy paměti | Volání funkce nelze zpracovat, protože základní objekty paměti nelze získat přístup, pravděpodobně kvůli nedostatku paměti. |
| HY090 | Neplatná délka řetězce nebo vyrovnávací paměti | (DM) Hodnota jednoho z argumentů délky byla menší než 0, ale nebyla rovna SQL_NTS. Hodnota jednoho z argumentů délky překročila maximální hodnotu délky pro odpovídající název. Maximální délku každého názvu lze získat voláním SQLGetInfo s hodnotami InfoType : SQL_MAX_CATALOG_NAME_LEN, SQL_MAX_SCHEMA_NAME_LEN nebo SQL_MAX_TABLE_NAME_LEN. |
| HY097 | Typ sloupce mimo dosah | (DM) Byla určena neplatná hodnota IdentifierType . |
| HY098 | Typ zaměřovače mimo dosah | (DM) Byla uvedena neplatná hodnota Scope . |
| HY099 | Nullable typ mimo dosah | (DM) Byla určena neplatná hodnota Nullable . |
| HY117 | Připojení je pozastaveno kvůli neznámému stavu transakce. Jsou povoleny pouze funkce pro odpojení a jen pro čtení. | (DM) Další informace o pozastaveném stavu naleznete v tématu FUNKCE SQLEndTran. |
| HYC00 | Nepovinná funkce není implementována. | Byl specifikován katalog, ale ovladač nebo datový zdroj katalogy nepodporuje. Bylo specifikováno schéma a ovladač nebo zdroj dat schémata nepodporuje. Ovladač ani zdroj dat nepodporuje kombinaci aktuálních nastavení atributů SQL_ATTR_CONCURRENCY a SQL_ATTR_CURSOR_TYPE příkazu. Atribut příkazu SQL_ATTR_USE_BOOKMARKS byl nastaven na SQL_UB_VARIABLE a atribut příkazu SQL_ATTR_CURSOR_TYPE byl nastaven na typ kurzoru, pro který ovladač nepodporuje záložky. |
| HYT00 | Vypršel časový limit. | Vypršení časového limitu dotazu vypršelo, než zdroj dat vrátil požadovanou sadu výsledků. Časový limit je nastavený prostřednictvím sqlSetStmtAttr SQL_ATTR_QUERY_TIMEOUT. |
| HYT01 | Vypršel časový limit připojení | Platnost časového limitu připojení vypršela, než zdroj dat odpověděl na žádost. Časový limit připojení je nastavený prostřednictvím sqlSetConnectAttr SQL_ATTR_CONNECTION_TIMEOUT. |
| IM001 | Ovladač tuto funkci nepodporuje. | (DM) Ovladač přidružený k StatementHandle nepodporuje funkci. |
| IM017 | Dotazování je zakázané v asynchronním režimu oznámení. | Při každém použití modelu oznámení je dotazování zakázané. |
| IM018 | K dokončení předchozí asynchronní operace na tomto popisovači nebyla volána funkce SQLCompleteAsync. | Pokud předchozí volání funkce na popisovači vrátí SQL_STILL_EXECUTING a pokud je povolen režim oznámení, musí být sqlCompleteAsync volán na popisovači, aby bylo možné provést následné zpracování a dokončit operaci. |
Comments
Když je argument IdentifierType SQL_BEST_ROWID, SQLSpecialColumns vrátí sloupec nebo sloupce, které jednoznačně identifikují každý řádek v tabulce. Tyto sloupce lze vždy použít v klauzuli select-list nebo WHERE . SQLColumns, který se používá k vrácení různých informací ve sloupcích tabulky, nemusí nutně vracet sloupce, které jednoznačně identifikují každý řádek, ani sloupce, které se automaticky aktualizují, když je jakákoli hodnota v řádku aktualizována transakcí. Například SQLColumns nemusí vracet Oracle pseudosloupec ROWID. Proto se k vrácení těchto sloupců používá SQLSpecialColumns . Další informace naleznete v tématu Použití dat katalogu.
Note
Další informace o obecném použití, argumentech a vrácených datech funkcí katalogu ODBC naleznete v tématu Funkce katalogu.
Pokud nejsou žádné sloupce, které by jednoznačně identifikovaly každý řádek v tabulce, SQLSpecialColumns vrací sadu řádků bez řádků; následné volání na SQLFetch nebo SQLFetchScroll na příkaz vrátí SQL_NO_DATA.
Pokud argumenty IdentifierType, Scope nebo Nullable specifikují charakteristiky, které nejsou zdrojem dat podporovány, SQLSpecialColumns vrátí prázdnou sadu výsledků.
Pokud je atribut SQL_ATTR_METADATA_ID příkazu nastaven na SQL_TRUE, argumenty CatalogName, SchemaName a TableName jsou považovány za identifikátory, takže je nelze v určitých situacích nastavit na nulový ukazatel. (Pro více informací viz Argumenty v katalogových funkcích.)
SQLSpecialColumns vrací výsledky jako standardní množinu výsledků, seřazenou podle SCOPE.
Následující sloupce byly přejmenovány pro ROZHRANÍ ODBC 3.x. Změny názvů sloupců neovlivňují zpětnou kompatibilitu, protože aplikace se vážou podle čísla sloupce.
| Sloupec ODBC 2.0 | Sloupec ODBC 3.x |
|---|---|
| PŘESNOST | COLUMN_SIZE |
| Délka | DÉLKA_BUFFERU |
| ŠKÁLA | Desetinné číslice |
Pro určení skutečné délky sloupce COLUMN_NAME může aplikace volat SQLGetInfo s možností SQL_MAX_COLUMN_NAME_LEN.
Následující tabulka uvádí sloupce v sadě výsledků. Další sloupce za sloupcem 8 (PSEUDO_COLUMN) může ovladač definovat. Aplikace by měla získat přístup ke sloupcům specifickým pro ovladač odpočítáváním od konce výsledné množiny místo explicitního určení ordinální pozice. Další informace naleznete v tématu Data vrácená funkcemi katalogu.
| Název sloupce | Číslo sloupce | Datový typ | Comments |
|---|---|---|---|
| SCOPE (ODBC 1.0) | 1 | Smallint | Skutečný rozsah rowidu. Obsahuje jednu z následujících hodnot: SQL_SCOPE_CURROW SQL_SCOPE_TRANSACTION SQL_SCOPE_SESSION NULL se vrací, když je IdentifierType SQL_ROWVER. Popis každé hodnoty najdete v popisu Scope v "Syntaxi" dříve v této části. |
| COLUMN_NAME (ODBC 1.0) | 2 | Varchar, ne NULL | Název sloupce Ovladač vrací prázdný řetězec pro sloupec, který nemá jméno. |
| DATA_TYPE (ODBC 1.0) | 3 | Smallint, ne NULL | Datový typ SQL Může se jednat o datový typ ODBC SQL nebo datový typ SQL specifický pro ovladač. Pro seznam platných ODBC SQL datových typů viz SQL datové typy. Informace o datových typech SQL specifických pro ovladače najdete v dokumentaci ovladače. |
| TYPE_NAME (ODBC 1.0) | 4 | Varchar, ne NULL | Název datového typu závislý na zdroji dat; Například "CHAR", "VARCHAR", "MONEY", "LONG VARBINARY" nebo "CHAR ( ) FOR BIT DATA". |
| COLUMN_SIZE (ODBC 1.0) | 5 | Integer | Velikost sloupce na datovém zdroji. Pro více informací o velikosti sloupců viz Velikost sloupce, Desetinné číslice, Délka přenosového oktetu a Velikost displeje. |
| BUFFER_LENGTH (ODBC 1.0) | 6 | Integer | Délka bajtů dat přenášených v SQLGetData nebo operace SQLFetch, pokud je zadána SQL_C_DEFAULT. U číselných dat se tato velikost může lišit od velikosti dat uložených ve zdroji dat. Tato hodnota se může lišit od sloupce COLUMN_SIZE pro data o postavě. Pro více informací viz Velikost sloupce, Desetinné číslice, Délka přenosového oktetu a Velikost displeje. |
| DECIMAL_DIGITS (ODBC 1.0) | 7 | Smallint | Desetinné číslice sloupce na datovém zdroji. NULL se vrací pro datové typy, kde desetinné číslice nejsou použitelné. Pro více informací o desetinných číslicích viz Velikost sloupce, Desetinné číslice, Délka přenosového oktetu a Velikost displeje. |
| PSEUDO_COLUMN (ODBC 2.0) | 8 | Smallint | Označuje, zda je sloupec pseudosloupcem, například Oracle ROWID: SQL_PC_UNKNOWN SQL_PC_NOT_PSEUDO SQL_PC_PSEUDO Poznámka: Pro maximální interoperabilitu by pseudo-sloupce neměly být citovány identifikátorem vráceným SQLGetInfo. |
Po získání hodnot pro SQL_BEST_ROWID může aplikace tyto hodnoty použít k opětovnému výběru daného řádku v definovaném rozsahu. Příkaz SELECT zaručeně vrátí buď žádné řádky, nebo jeden řádek.
Pokud aplikace znovu vybere řádek na základě sloupce nebo sloupců řádku a řádek není nalezen, může předpokládat, že řádek byl smazán nebo byly sloupce s řádky upraveny. Opak neplatí: i když se rowid nezměnil, ostatní sloupce v řádku se mohly změnit.
Sloupce vrácené pro typ sloupce SQL_BEST_ROWID jsou užitečné pro aplikace, které potřebují posouvat dopředu a zpět v rámci sady výsledků, aby získaly nejnovější data ze sady řádků. Sloupec nebo sloupce rowida se zaručeně nezmění, když jsou umístěny v tomto řádku.
Sloupec nebo sloupce rowidu mohou zůstat platné i tehdy, když kurzor není umístěn na řádku; aplikace to může určit kontrolou sloupce SCOPE ve výsledné množině.
Sloupce vrácené pro typ sloupce SQL_ROWVER jsou užitečné pro aplikace, které potřebují možnost zkontrolovat, zda byly některé sloupce v daném řádku aktualizovány během opětovného výběru řádku pomocí rowidu. Například po opětovném výběru řádku pomocí rowida může aplikace porovnat předchozí hodnoty ve sloupcích SQL_ROWVER s těmi, které právě načetla. Pokud se hodnota ve sloupci SQL_ROWVER liší od předchozí, aplikace může uživatele upozornit, že se data na displeji změnila.
Příklad kódu
Pro příklad kódu podobné funkce viz SQLColumns.
Související funkce
| Informace o | Podívejte se |
|---|---|
| Vytvoření vazby vyrovnávací paměti ke sloupci v sadě výsledků | SQLBindCol – funkce |
| Zrušení zpracování příkazů | SQLCancel – funkce |
| Vrácení sloupců v tabulce nebo tabulkách | SQLColumns Function |
| Načítání jednoho řádku nebo bloku dat pouze ve směru dopředu | Funkce SQLFetch |
| Načtení bloku dat nebo procházení sady výsledků | SQLFetchScroll – funkce |
| Vrácení sloupců primárního klíče | FUNKCE SQLPrimaryKeys |