Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Conformidade
Versão Introduzida: Conformidade com os Padrões ODBC 1.0: ODBC
Summary
SQLPrimaryKeys retorna os nomes das colunas que compõem a chave primária de uma tabela. O driver retorna as informações como um conjunto de resultados. Essa função não suporta o retorno de chaves primárias de múltiplas tabelas em uma única chamada.
Sintaxe
SQLRETURN SQLPrimaryKeys(
SQLHSTMT StatementHandle,
SQLCHAR * CatalogName,
SQLSMALLINT NameLength1,
SQLCHAR * SchemaName,
SQLSMALLINT NameLength2,
SQLCHAR * TableName,
SQLSMALLINT NameLength3);
Argumentos
Identificador de declaração
[Entrada] Identificador de instrução.
Catalogname
[Entrada] Nome do catálogo. Se um driver suporta catálogos para algumas tabelas, mas não para outras, como quando o driver recupera dados de diferentes DBMSs, uma string vazia ("") denota aquelas tabelas que não possuem catálogos.
CatalogName não pode conter um padrão de busca em string.
Se o atributo da instrução SQL_ATTR_METADATA_ID for definido como SQL_TRUE, CatalogName é tratado como um identificador e seu caso não é significativo. Se for SQL_FALSE, Nome do Catálogo é um argumento comum; É tratado literalmente, e seu caso é significativo. Para obter mais informações, confira Argumentos em funções de catálogo.
NameLength1
[Entrada] Comprimento em caracteres de *NomeDeCatálogo.
Nome do esquema
[Entrada] Nome do esquema. Se um driver suporta esquemas para algumas tabelas, mas não para outras, como quando o driver recupera dados de diferentes SGBDs, uma string vazia ("") denota aquelas tabelas que não possuem esquemas.
O NomeSchema não pode conter um padrão de busca em string.
Se o atributo da instrução SQL_ATTR_METADATA_ID for definido como SQL_TRUE, SchemaName é tratado como um identificador e seu caso não é significativo. Se for SQL_FALSE, NomeEsquema é um argumento comum; É tratado literalmente, e seu caso não é significativo.
NameLength2
[Entrada] Comprimento em caracteres de *NomeEsquema.
TableName
[Entrada] Nome da tabela. Esse argumento não pode ser um ponto nulo.
TableName não pode conter um padrão de busca em cadeia de caracteres.
Se o atributo da instrução SQL_ATTR_METADATA_ID for definido como SQL_TRUE, TableName é tratado como um identificador e seu caso não é significativo. Se for SQL_FALSE, Nome da Tabela é um argumento comum; É tratado literalmente, e seu caso não é significativo.
NameLength3
[Entrada] Comprimento em caracteres de *NomeTaula.
Returns
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_ERROR ou SQL_INVALID_HANDLE.
Diagnostics
Quando SQLPrimaryKeys retorna SQL_ERROR ou SQL_SUCCESS_WITH_INFO, um valor SQLSTATE associado pode ser obtido chamando SQLGetDiagRec com um HandleType de SQL_HANDLE_STMT e um Handle de StatementHandle. A tabela a seguir lista os valores SQLSTATE comumente retornados pelo SQLPrimaryKeys e explica cada um no contexto dessa função; a notação "(DM)" precede as descrições dos SQLSTATEs retornadas pelo Gerenciador de Drivers. O código de retorno associado a cada valor SQLSTATE é SQL_ERROR, a menos que indicado de outra forma.
| SQLSTATE | Erro | DESCRIÇÃO |
|---|---|---|
| 01000 | Aviso geral | Mensagem informativa específica do driver. (A função retorna SQL_SUCCESS_WITH_INFO.) |
| 08S01 | Falha no link de comunicação | O link de comunicação entre o driver e a fonte de dados à qual o driver estava conectado falhou antes que a função concluísse o processamento. |
| 24000 | Estado de cursor inválido | (DM) Um cursor estava aberto no StatementHandle e SQLFetch ou SQLFetchScroll havia sido chamado. Um cursor estava aberto no StatementHandle, mas SQLFetch ou SQLFetchScroll não haviam sido chamados. |
| 40001 | Falha de serialização | A transação foi revertida devido a um deadlock de recursos com outra transação. |
| 40003 | Conclusão da instrução desconhecida | A conexão associada falhou durante a execução dessa função e o estado da transação não pode ser determinado. |
| HY000 | Erro geral | Ocorreu um erro para o qual não havia SQLSTATE específico e para o qual nenhum SQLSTATE específico da implementação foi definido. A mensagem de erro retornada por SQLGetDiagRec no buffer *MessageText descreve o erro e sua causa. |
| HY001 | Erro de alocação de memória | O driver não pôde alocar a memória necessária para dar suporte à execução ou conclusão da função. |
| HY008 | Operação cancelada | O processamento assíncrono foi habilitado para o StatementHandle. A função foi chamada e, antes de concluir a execução, SQLCancel ou SQLCancelHandle foi chamado no StatementHandle. Em seguida, a função foi chamada novamente no StatementHandle. A função foi chamada e, antes de concluir a execução, SQLCancel ou SQLCancelHandle foi chamado no StatementHandle de um thread diferente em um aplicativo multithread. |
| HY009 | Uso inválido de ponteiro nulo | (DM) O argumento TableName era um ponteiro nulo. O atributo da instrução SQL_ATTR_METADATA_ID era definido como SQL_TRUE, o argumento CatalogName era um ponteiro nulo, e SQLGetInfo , com o tipo de informação SQL_CATALOG_NAME, retorna que nomes de catálogo são suportados. (DM) O atributo da instrução SQL_ATTR_METADATA_ID foi definido como SQL_TRUE, e o argumento SchemaName era um ponteiro nulo. |
| HY010 | Erro de sequência de função | (DM) Uma função de execução assíncrona foi chamada para o identificador de conexão associado ao StatementHandle. Essa função assíncrona ainda estava em execução quando a função SQLPrimaryKeys foi chamada. (DM) SQLExecute, SQLExecDirect ou SQLMoreResults foi chamado para o StatementHandle e retornado SQL_PARAM_DATA_AVAILABLE. Essa função foi chamada antes que os dados fossem recuperados para todos os parâmetros transmitidos. (DM) Uma função de execução assíncrona (não esta) foi chamada para o StatementHandle e ainda estava em execução quando essa função foi chamada. (DM) SQLExecute, SQLExecDirect, SQLBulkOperations ou SQLSetPos foi chamado para o StatementHandle e retornado SQL_NEED_DATA. Essa função foi chamada antes que os dados fossem enviados para todos os parâmetros ou colunas de dados em execução. |
| HY013 | Erro de gerenciamento de memória | A chamada de função não pôde ser processada porque os objetos de memória subjacentes não puderam ser acessados, possivelmente devido a condições de memória baixa. |
| HY090 | Cadeia de caracteres ou comprimento de buffer inválido | (DM) O valor de um dos argumentos do comprimento do nome era menor que 0, mas não igual a SQL_NTS, e o argumento associado ao nome não é um ponteiro nulo. O valor de um dos argumentos de comprimento do nome excedeu o valor máximo de comprimento para o nome correspondente. |
| HY117 | A conexão está suspensa devido ao estado desconhecido da transação. Somente funções de desconexão e somente leitura são permitidas. | (DM) Para obter mais informações sobre o estado suspenso, consulte Função SQLEndTran. |
| HYC00 | Recurso opcional não implementado | Um catálogo foi especificado, e o driver ou fonte de dados não suporta catálogos. Um esquema foi especificado e o driver ou fonte de dados não suporta esquemas. A combinação das configurações atuais dos atributos de instrução SQL_ATTR_CONCURRENCY e SQL_ATTR_CURSOR_TYPE não era compatível com o driver ou a fonte de dados. O atributo de instrução SQL_ATTR_USE_BOOKMARKS foi definido como SQL_UB_VARIABLE e o atributo de instrução SQL_ATTR_CURSOR_TYPE foi definido como um tipo de cursor para o qual o driver não dá suporte a indicadores. |
| HYT00 | Tempo limite expirado | O período de tempo expirou antes que a fonte de dados retornasse o conjunto de resultados solicitado. O período de tempo limite é definido por meio de SQLSetStmtAttr, SQL_ATTR_QUERY_TIMEOUT. |
| HYT01 | O tempo limite da conexão expirou | O período de tempo limite da conexão expirou antes que a fonte de dados respondesse à solicitação. O período de tempo limite da conexão é definido por meio de SQLSetConnectAttr, SQL_ATTR_CONNECTION_TIMEOUT. |
| IM001 | O driver não suporta esta função | (DM) O driver associado ao StatementHandle não dá suporte à função. |
| IM017 | A sondagem está desabilitada no modo de notificação assíncrona | Sempre que o modelo de notificação é usado, a sondagem é desabilitada. |
| IM018 | SQLCompleteAsync não foi chamado para concluir a operação assíncrona anterior nesse identificador. | Se a chamada de função anterior no identificador retornar SQL_STILL_EXECUTING e se o modo de notificação estiver habilitado, SQLCompleteAsync deverá ser chamado no identificador para fazer o pós-processamento e concluir a operação. |
Comments
SQLPrimaryKeys retorna os resultados como um conjunto padrão de resultados, ordenado por TABLE_CAT, TABLE_SCHEM, TABLE_NAME e KEY_SEQ. Para obter informações sobre como essas informações podem ser usadas, consulte Usos de dados de catálogo.
As colunas a seguir foram renomeadas para ODBC 3.x. As mudanças no nome das colunas não afetam a compatibilidade retroativa porque as aplicações são vinculadas por número de coluna.
| Coluna ODBC 2.0 | ODBC 3.coluna x |
|---|---|
| QUALIFICADOR_DE_TABELA | TABLE_CAT |
| PROPRIETÁRIO_DA_TABELA | TABLE_SCHEM |
Para determinar os comprimentos reais das colunas TABLE_CAT, TABLE_SCHEM, TABLE_NAME e COLUMN_NAME, ligue para o SQLGetInfo com as opções SQL_MAX_CATALOG_NAME_LEN, SQL_MAX_SCHEMA_NAME_LEN, SQL_MAX_TABLE_NAME_LEN e SQL_MAX_COLUMN_NAME_LEN.
Note
Para obter mais informações sobre o uso geral, argumentos e dados retornados de funções de catálogo ODBC, consulte Funções de Catálogo.
A tabela a seguir lista as colunas no conjunto de resultados. Colunas adicionais além da coluna 6 (PK_NAME) podem ser definidas pelo driver. Uma aplicação deve obter acesso a colunas específicas do driver contando regressivamente a partir do final do conjunto de resultados, em vez de especificar uma posição ordinal explícita. Para obter mais informações, consulte Dados Retornados por Funções de Catálogo.
| Nome da Coluna | Número da coluna | Tipo de dados | Comments |
|---|---|---|---|
| TABLE_CAT (ODBC 1.0) | 1 | Varchar | Nome do catálogo da tabela de chaves primárias; NULL se não aplicável à fonte de dados. Se um driver suporta catálogos para algumas tabelas, mas não para outras, como quando o driver recupera dados de diferentes DBMSs, ele retorna uma string vazia ("") para aquelas tabelas que não possuem catálogos. |
| TABLE_SCHEM (ODBC 1.0) | 2 | Varchar | Nome do esquema da tabela de chaves primárias; NULL se não aplicável à fonte de dados. Se um driver suporta esquemas para algumas tabelas, mas não para outras, como quando o driver recupera dados de diferentes DBMSs, ele retorna uma string vazia ("") para aquelas tabelas que não possuem esquemas. |
| TABLE_NAME (ODBC 1.0) | 3 | Varchar não é NULL | Nome da tabela de chave primária. |
| COLUMN_NAME (ODBC 1.0) | 4 | Varchar não é NULL | Nome da coluna principal. O driver retorna uma string vazia para uma coluna que não tem nome. |
| KEY_SEQ (ODBC 1.0) | 5 | Smallint não NULL | Número da sequência da coluna em chave (começando com 1). |
| PK_NAME (ODBC 2.0) | 6 | Varchar | Nome chave primário. NULL se não aplicável à fonte de dados. |
Exemplo de código
Veja SQLForeignKeys.
Funções relacionadas
| Para obter informações sobre | Veja |
|---|---|
| Associando um buffer a uma coluna em um conjunto de resultados | Função SQLBindCol |
| Cancelando o processamento de instruções | Função SQLCancel |
| Buscando um bloco de dados ou rolando por um conjunto de resultados | Função SQLFetchScroll |
| Buscar uma única linha ou um bloco de dados em direção apenas direta | Função SQLFetch |
| Retornando as colunas de chaves estrangeiras | Função SQLForeignKeys |
| Retornando estatísticas e índices de tabelas | Função SQLStatistics |