Fonction SQLPrimaryKeys
Conformité
Version introduite : Conformité aux normes ODBC 1.0 : ODBC
Résumé
SQLPrimaryKeys retourne les noms de colonnes qui composent la clé primaire d’une table. Le pilote retourne les informations sous forme de jeu de résultats. Cette fonction ne prend pas en charge le retour de clés primaires à partir de plusieurs tables dans un seul appel.
Syntaxe
SQLRETURN SQLPrimaryKeys(
SQLHSTMT StatementHandle,
SQLCHAR * CatalogName,
SQLSMALLINT NameLength1,
SQLCHAR * SchemaName,
SQLSMALLINT NameLength2,
SQLCHAR * TableName,
SQLSMALLINT NameLength3);
Arguments
StatementHandle
[Entrée] Handle d’instruction.
CatalogName
[Entrée] Nom du catalogue. Si un pilote prend en charge les catalogues pour certaines tables, mais pas pour d’autres, par exemple lorsque le pilote récupère des données à partir de différents SGBD, une chaîne vide (« ») désigne les tables qui n’ont pas de catalogues. CatalogName ne peut pas contenir un modèle de recherche de chaîne.
Si l’attribut d’instruction SQL_ATTR_METADATA_ID a la valeur SQL_TRUE, CatalogName est traité comme un identificateur et sa casse n’est pas significative. S’il est SQL_FALSE, CatalogName est un argument ordinaire ; il est traité littéralement, et son cas est significatif. Pour plus d’informations, consultez Arguments dans les fonctions de catalogue.
NameLength1
[Entrée] Longueur en caractères de *CatalogName.
SchemaName
[Entrée] Nom du schéma. Si un pilote prend en charge des schémas pour certaines tables, mais pas pour d’autres, par exemple quand le pilote récupère des données à partir de différents SGBD, une chaîne vide (« ») désigne les tables qui n’ont pas de schémas. SchemaName ne peut pas contenir un modèle de recherche de chaîne.
Si l’attribut d’instruction SQL_ATTR_METADATA_ID a la valeur SQL_TRUE, SchemaName est traité comme un identificateur et sa casse n’est pas significative. S’il est SQL_FALSE, SchemaName est un argument ordinaire ; il est traité littéralement, et son cas n’est pas significatif.
NameLength2
[Entrée] Longueur en caractères de *SchemaName.
TableName
[Entrée] Nom de la table. Cet argument ne peut pas être un pointeur Null. TableName ne peut pas contenir de modèle de recherche de chaîne.
Si l’attribut d’instruction SQL_ATTR_METADATA_ID a la valeur SQL_TRUE, TableName est traité comme un identificateur et sa casse n’est pas significative. S’il est SQL_FALSE, TableName est un argument ordinaire ; il est traité littéralement, et son cas n’est pas significatif.
NameLength3
[Entrée] Longueur en caractères *TableName.
Retours
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_ERROR ou SQL_INVALID_HANDLE.
Diagnostics
Lorsque SQLPrimaryKeys retourne SQL_ERROR ou SQL_SUCCESS_WITH_INFO, une valeur SQLSTATE associée peut être obtenue en appelant SQLGetDiagRec avec un HandleType de SQL_HANDLE_STMT et un Handle de StatementHandle. Le tableau suivant répertorie les valeurs SQLSTATE couramment retournées par SQLPrimaryKeys et explique chacune d’elles dans le contexte de cette fonction ; La notation « (DM) » précède les descriptions de SQLSTATEs retournées par le Gestionnaire de pilotes. Le code de retour associé à chaque valeur SQLSTATE est SQL_ERROR, sauf indication contraire.
SQLSTATE | Error | Description |
---|---|---|
01000 | Avertissement général | Message d’information spécifique au pilote. (La fonction retourne SQL_SUCCESS_WITH_INFO.) |
08S01 | Échec de la liaison de communication | Le lien de communication entre le pilote et la source de données à laquelle le pilote a été connecté a échoué avant la fin du traitement de la fonction. |
24 000 | État de curseur non valide | (DM) Un curseur était ouvert sur l’InstructionHandle, et SQLFetchScroll avait été appelé. Un curseur était ouvert sur l’InstructionHandle, mais SQLFetchou SQLFetchScroll n’avait pas été appelé. |
40001 | Échec de sérialisation | La transaction a été annulée en raison d’un interblocage de ressources avec une autre transaction. |
40003 | Saisie semi-automatique d’instruction inconnue | La connexion associée a échoué pendant l’exécution de cette fonction et l’état de la transaction ne peut pas être déterminé. |
HY000 | Erreur générale | Une erreur s’est produite pour laquelle il n’y avait pas de SQLSTATE spécifique et pour laquelle aucun SQLSTATE spécifique à l’implémentation n’a été défini. Le message d’erreur retourné par SQLGetDiagRec dans la mémoire tampon *MessageText décrit l’erreur et sa cause. |
HY001 | Erreur d’allocation de mémoire | Le pilote n’a pas pu allouer la mémoire nécessaire pour prendre en charge l’exécution ou l’achèvement de la fonction. |
HY008 | Opération annulée | Le traitement asynchrone a été activé pour l’InstructionHandle. La fonction a été appelée et, avant la fin de son exécution, SQLCancel ou SQLCancelHandle a été appelée sur l’InstructionHandle. Ensuite, la fonction a été appelée à nouveau sur l’InstructionHandle. La fonction a été appelée et, avant la fin de son exécution, SQLCancel ou SQLCancelHandle a été appelé sur l’InstructionHandle à partir d’un thread différent dans une application multithread. |
HY009 | Utilisation non valide du pointeur Null | (DM) L’argument TableName était un pointeur null. L’attribut d’instruction SQL_ATTR_METADATA_ID a été défini sur SQL_TRUE, l’argument CatalogName était un pointeur Null et SQLGetInfo avec le type d’informations SQL_CATALOG_NAME retourne que les noms de catalogue sont pris en charge. (DM) L’attribut d’instruction SQL_ATTR_METADATA_ID a été défini sur SQL_TRUE, et l’argument SchemaName était un pointeur null. |
HY010 | Erreur de séquence de fonction | (DM) Une fonction en exécution asynchrone a été appelée pour le handle de connexion associé à l’InstructionHandle. Cette fonction asynchrone était toujours en cours d’exécution lorsque la fonction SQLPrimaryKeys a été appelée. (DM) SQLExecute, SQLExecDirect ou SQLMoreResults a été appelé pour l’InstructionHandle et a retourné SQL_PARAM_DATA_AVAILABLE. Cette fonction a été appelée avant la récupération des données pour tous les paramètres diffusés en continu. (DM) Une fonction en cours d’exécution asynchrone (et non celle-ci) a été appelée pour l’InstructionHandle et était toujours en cours d’exécution lorsque cette fonction a été appelée. (DM) SQLExecute, SQLExecDirect, SQLBulkOperations ou SQLSetPos a été appelé pour l’InstructionHandle et a retourné SQL_NEED_DATA. Cette fonction a été appelée avant l’envoi des données pour toutes les colonnes ou paramètres de données au moment de l’exécution. |
HY013 | Erreur de gestion de la mémoire | L’appel de fonction n’a pas pu être traité, car les objets de mémoire sous-jacents n’ont pas pu être accessibles, peut-être en raison de conditions de mémoire insuffisantes. |
HY090 | Chaîne ou longueur de mémoire tampon non valide | (DM) La valeur de l’un des arguments de longueur de nom était inférieure à 0, mais pas égale à SQL_NTS, et l’argument de nom associé n’est pas un pointeur null. La valeur de l’un des arguments de longueur de nom a dépassé la valeur de longueur maximale pour le nom correspondant. |
HY117 | La connexion est suspendue en raison d’un état de transaction inconnu. Seules les fonctions de déconnexion et de lecture seule sont autorisées. | (DM) Pour plus d’informations sur l’état suspendu, consultez Fonction SQLEndTran. |
HYC00 | Fonctionnalité facultative non implémentée | Un catalogue a été spécifié et le pilote ou la source de données ne prend pas en charge les catalogues. Un schéma a été spécifié et le pilote ou la source de données ne prend pas en charge les schémas. La combinaison des paramètres actuels des attributs d’instruction SQL_ATTR_CONCURRENCY et SQL_ATTR_CURSOR_TYPE n’était pas prise en charge par le pilote ou la source de données. L’attribut d’instruction SQL_ATTR_USE_BOOKMARKS a été défini sur SQL_UB_VARIABLE, et l’attribut d’instruction SQL_ATTR_CURSOR_TYPE a été défini sur un type de curseur pour lequel le pilote ne prend pas en charge les signets. |
HYT00 | Délai expiré | Le délai d’expiration a expiré avant que la source de données n’a retourné le jeu de résultats demandé. Le délai d’expiration est défini via SQLSetStmtAttr, SQL_ATTR_QUERY_TIMEOUT. |
HYT01 | Délai d’attente de la connexion expiré | Le délai d’expiration de la connexion a expiré avant que la source de données ne réponde à la demande. Le délai d’expiration de connexion est défini via SQLSetConnectAttr, SQL_ATTR_CONNECTION_TIMEOUT. |
IM001 | Le pilote ne prend pas en charge cette fonction | (DM) Le pilote associé à l’InstructionHandle ne prend pas en charge la fonction . |
IM017 | L’interrogation est désactivée en mode de notification asynchrone | Chaque fois que le modèle de notification est utilisé, l’interrogation est désactivée. |
IM018 | SQLCompleteAsync n’a pas été appelé pour effectuer l’opération asynchrone précédente sur ce handle. | Si l’appel de fonction précédent sur le handle retourne SQL_STILL_EXECUTING et si le mode de notification est activé, SQLCompleteAsync doit être appelé sur le handle pour effectuer le post-traitement et terminer l’opération. |
Commentaires
SQLPrimaryKeys retourne les résultats sous la forme d’un jeu de résultats standard, classé par TABLE_CAT, TABLE_SCHEM, TABLE_NAME et KEY_SEQ. Pour plus d’informations sur la façon dont ces informations peuvent être utilisées, consultez Utilisations des données de catalogue.
Les colonnes suivantes ont été renommées pour ODBC 3. x. Les changements de nom de colonne n’affectent pas la compatibilité descendante, car les applications sont liées par numéro de colonne.
Colonne ODBC 2.0 | ODBC 3. colonne x |
---|---|
TABLE_QUALIFIER | TABLE_CAT |
TABLE_OWNER | TABLE_SCHEM |
Pour déterminer la longueur réelle des colonnes TABLE_CAT, TABLE_SCHEM, TABLE_NAME et COLUMN_NAME, appelez SQLGetInfo avec les options SQL_MAX_CATALOG_NAME_LEN, SQL_MAX_SCHEMA_NAME_LEN, SQL_MAX_TABLE_NAME_LEN et SQL_MAX_COLUMN_NAME_LEN.
Notes
Pour plus d’informations sur l’utilisation générale, les arguments et les données retournées des fonctions de catalogue ODBC, consultez Fonctions de catalogue.
Le tableau suivant répertorie les colonnes du jeu de résultats. Des colonnes supplémentaires au-delà de la colonne 6 (PK_NAME) peuvent être définies par le pilote. Une application doit accéder à des colonnes spécifiques au pilote en comptant à partir de la fin du jeu de résultats plutôt que de spécifier une position ordinale explicite. Pour plus d’informations, consultez Données retournées par les fonctions de catalogue.
Nom de la colonne | Numéro de colonne | Type de données | Commentaires |
---|---|---|---|
TABLE_CAT (ODBC 1.0) | 1 | Varchar | Nom du catalogue de la table de clés primaires ; NULL s’il n’est pas applicable à la source de données. Si un pilote prend en charge les catalogues pour certaines tables, mais pas pour d’autres, par exemple quand le pilote récupère des données à partir de différents SGBD, il retourne une chaîne vide (« ») pour les tables qui n’ont pas de catalogues. |
TABLE_SCHEM (ODBC 1.0) | 2 | Varchar | Nom du schéma de la table de clés primaires ; NULL s’il n’est pas applicable à la source de données. Si un pilote prend en charge des schémas pour certaines tables, mais pas pour d’autres, par exemple quand le pilote récupère des données à partir de différents SGBD, il retourne une chaîne vide (« ») pour les tables qui n’ont pas de schémas. |
TABLE_NAME (ODBC 1.0) | 3 | Varchar n’est pas NULL | Nom de la table de clé primaire. |
COLUMN_NAME (ODBC 1.0) | 4 | Varchar n’est pas NULL | Nom de colonne de clé primaire. Le pilote retourne une chaîne vide pour une colonne qui n’a pas de nom. |
KEY_SEQ (ODBC 1.0) | 5 | Smallint non NULL | Numéro de séquence de colonne dans la clé (à partir de 1). |
PK_NAME (ODBC 2.0) | 6 | Varchar | Nom de la clé primaire. NULL s’il n’est pas applicable à la source de données. |
Exemple de code
Consultez SQLForeignKeys.
Fonctions connexes
Pour obtenir des informations sur | Consultez |
---|---|
Liaison d’une mémoire tampon à une colonne dans un jeu de résultats | Fonction SQLBindCol |
Annulation du traitement des instructions | SQLCancel, fonction |
Extraction d’un bloc de données ou défilement d’un jeu de résultats | Fonction SQLFetchScroll |
Extraction d’une seule ligne ou d’un bloc de données dans une direction avant uniquement | SQLFetch, fonction |
Retour des colonnes de clés étrangères | Fonction SQLForeignKeys |
Retour des statistiques et des index de table | Fonction SQLStatistics |
Voir aussi
Informations de référence sur l’API ODBC
Fichiers d’en-tête ODBC