Condividi tramite


SQLColumnPrivileges Function

Conformità
Versione introdotta: Conformità agli standard ODBC 1.0: ODBC

Riepilogo
SQLColumnPrivileges restituisce un elenco di colonne e privilegi associati per la tabella specificata. Il driver restituisce le informazioni come set di risultati nell'oggetto StatementHandle specificato.

Sintassi

  
SQLRETURN SQLColumnPrivileges(  
     SQLHSTMT      StatementHandle,  
     SQLCHAR *     CatalogName,  
     SQLSMALLINT   NameLength1,  
     SQLCHAR *     SchemaName,  
     SQLSMALLINT   NameLength2,  
     SQLCHAR *     TableName,  
     SQLSMALLINT   NameLength3,  
     SQLCHAR *     ColumnName,  
     SQLSMALLINT   NameLength4);  

Argomenti

StatementHandle
[Input] Handle di istruzione.

CatalogName
[Input] Nome catalogo. Se un driver supporta nomi per alcuni cataloghi ma non per altri, ad esempio quando il driver recupera i dati da diversi DBMS, una stringa vuota ("") indica i cataloghi che non hanno nomi. CatalogName non può contenere un criterio di ricerca di stringhe.

Se l'attributo dell'istruzione SQL_ATTR_METADATA_ID è impostato su SQL_TRUE, CatalogName viene considerato come identificatore e il relativo case non è significativo. Se è SQL_FALSE, CatalogName è un argomento ordinario; viene trattato letteralmente e il relativo caso è significativo. Per altre informazioni, vedere Argomenti in Funzioni del catalogo.

NameLength1
[Input] Lunghezza in caratteri di *CatalogName.

SchemaName
[Input] Nome schema. Se un driver supporta gli schemi per alcune tabelle ma non per altri, ad esempio quando il driver recupera i dati da diversi DBMS, una stringa vuota ("") indica le tabelle che non dispongono di schemi. SchemaName non può contenere un criterio di ricerca di stringhe.

Se l'attributo dell'istruzione SQL_ATTR_METADATA_ID è impostato su SQL_TRUE, SchemaName viene considerato come identificatore. Se è SQL_FALSE, SchemaName è un argomento ordinario; viene trattato letteralmente e il relativo caso è significativo.

NameLength2
[Input] Lunghezza in caratteri di *SchemaName.

TableName
[Input] Nome tabella. Questo argomento non può essere un puntatore Null. TableName non può contenere un criterio di ricerca di stringhe.

Se l'attributo dell'istruzione SQL_ATTR_METADATA_ID è impostato su SQL_TRUE, TableName viene considerato come identificatore e il relativo case non è significativo. Se è SQL_FALSE, TableName è un argomento ordinario; viene trattato letteralmente e il relativo case è significativo.

NameLength3
[Input] Lunghezza in caratteri di *TableName.

ColumnName
[Input] Modello di ricerca di stringhe per i nomi di colonna.

Se l'attributo dell'istruzione SQL_ATTR_METADATA_ID è impostato su SQL_TRUE, ColumnName viene considerato come identificatore e il relativo case non è significativo. Se è SQL_FALSE, ColumnName è un argomento del valore del criterio; viene trattato letteralmente e il relativo case è significativo.

NameLength4
[Input] Lunghezza in caratteri di *ColumnName.

Resi

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_STILL_EXECUTING, SQL_ERROR o SQL_INVALID_HANDLE.

Diagnostica

Quando SQLColumnPrivileges restituisce SQL_ERROR o SQL_SUCCESS_WITH_INFO, è possibile ottenere un valore SQLSTATE associato chiamando SQLGetDiagRec con handleTypedi SQL_HANDLE_STMT e handle di StatementHandle. La tabella seguente elenca i valori SQLSTATE comunemente restituiti da SQLColumnPrivileges e spiega ognuno nel contesto di questa funzione. La notazione "(DM)" precede le descrizioni di SQLSTATEs restituite da Gestione driver. Il codice restituito associato a ogni valore SQLSTATE è SQL_ERROR, a meno che non sia specificato diversamente.

SQLSTATE Errore Descrizione
01000 Avviso generale Messaggio informativo specifico del driver. (La funzione restituisce SQL_SUCCESS_WITH_INFO.
08S01 Errore del collegamento di comunicazione Collegamento di comunicazione tra il driver e l'origine dati a cui è stato connesso il driver non è riuscito prima del completamento dell'elaborazione della funzione.
24000 Stato del cursore non valido È stato aperto un cursore in StatementHandle e è stato chiamato SQLFetch o SQLFetchScroll . Questo errore viene restituito da Gestione driver se SQLFetch o SQLFetchScroll non ha restituito SQL_NO_DATA e viene restituito dal driver se SQLFetch o SQLFetchScroll ha restituito SQL_NO_DATA.

Un cursore è stato aperto in StatementHandle, ma SQLFetch o SQLFetchScroll non è stato chiamato.
40001 Errore di serializzazione È stato eseguito il rollback della transazione a causa di un deadlock della risorsa con un'altra transazione.
40003 Completamento istruzione sconosciuto La connessione associata non è riuscita durante l'esecuzione di questa funzione e non è possibile determinare lo stato della transazione.
HY000 Errore generale: Si è verificato un errore per il quale non è stato specificato SQLSTATE e per il quale non è stato definito alcun SQLSTATE specifico dell'implementazione. Il messaggio di errore restituito da SQLGetDiagRec nel buffer *MessageText descrive l'errore e la relativa causa.
HY001 Errore di allocazione della memoria Il driver non è riuscito ad allocare memoria necessaria per supportare l'esecuzione o il completamento della funzione.
HY008 Operazione annullata L'elaborazione asincrona è stata abilitata per StatementHandle. La funzione è stata chiamata e prima di completare l'esecuzione, SQLCancel o SQLCancelHandle è stata chiamata in StatementHandle. La funzione è stata quindi chiamata di nuovo in StatementHandle.

La funzione è stata chiamata e prima del completamento dell'esecuzione, SQLCancel o SQLCancelHandle è stato chiamato su StatementHandle da un thread diverso in un'applicazione multithread.
HY009 Uso non valido del puntatore Null L'argomento TableName è un puntatore Null.

L'attributo dell'istruzione SQL_ATTR_METADATA_ID è stato impostato su SQL_TRUE, l'argomento CatalogName è un puntatore Null e l'SQL_CATALOG_NAME InfoType restituisce che i nomi di catalogo sono supportati.

(DM) L'attributo dell'istruzione SQL_ATTR_METADATA_ID è stato impostato su SQL_TRUE e l'argomento SchemaName o ColumnName è un puntatore Null.
HY010 Errore della sequenza di funzioni (DM) È stata chiamata una funzione in esecuzione asincrona per l'handle di connessione associato a StatementHandle. Questa funzione asincrona era ancora in esecuzione quando questa funzione è stata chiamata.

(DM) SQLExecute, SQLExecDirect o SQLMoreResults è stato chiamato per StatementHandle e restituito SQL_PARAM_DATA_AVAILABLE. Questa funzione è stata chiamata prima del recupero dei dati per tutti i parametri trasmessi.

(DM) Una funzione in esecuzione asincrona (non questa) è stata chiamata per StatementHandle ed è ancora in esecuzione quando questa funzione è stata chiamata.

(DM) SQLExecute, SQLExecDirect, SQLBulkOperations o SQLSetPos è stato chiamato per StatementHandle e restituito SQL_NEED_DATA. Questa funzione è stata chiamata prima dell'invio dei dati per tutti i parametri o le colonne data-at-execution.
HY013 Errore di gestione della memoria Impossibile elaborare la chiamata di funzione perché non è stato possibile accedere agli oggetti di memoria sottostanti, probabilmente a causa di condizioni di memoria insufficiente.
HY090 Lunghezza della stringa o del buffer non valida (DM) Il valore di uno degli argomenti di lunghezza del nome è minore di 0 ma non uguale a SQL_NTS.
Il valore di uno degli argomenti lunghezza nome ha superato il valore di lunghezza massima per il nome corrispondente. (Vedere "Comments.")
HY117 La connessione viene sospesa a causa dello stato sconosciuto della transazione. Sono consentite solo funzioni disconnesse e di sola lettura. (DM) Per altre informazioni sullo stato sospeso, vedere Funzione SQLEndTran.
HYC00 Funzionalità facoltativa non implementata È stato specificato un nome di catalogo e il driver o l'origine dati non supporta i cataloghi.

È stato specificato un nome di schema e il driver o l'origine dati non supporta gli schemi.

È stato specificato un criterio di ricerca di stringhe per il nome della colonna e l'origine dati non supporta i criteri di ricerca per tale argomento.

La combinazione delle impostazioni correnti dei SQL_CONCURRENCY e degli attributi dell'istruzione SQL_CURSOR_TYPE non è supportata dal driver o dall'origine dati.

L'attributo di istruzione SQL_ATTR_USE_BOOKMARKS è stato impostato su SQL_UB_VARIABLE e l'attributo dell'istruzione SQL_ATTR_CURSOR_TYPE è stato impostato su un tipo di cursore per cui il driver non supporta i segnalibri.
HYT00 Timeout scaduto Periodo di timeout della query scaduto prima che l'origine dati restituisca il set di risultati. Il periodo di timeout viene impostato tramite SQLSetStmtAttr, SQL_ATTR_QUERY_TIMEOUT.
HYT01 Il timeout della connessione è scaduto Periodo di timeout della connessione scaduto prima che l'origine dati rispondesse alla richiesta. Il periodo di timeout della connessione viene impostato tramite SQLSetConnectAttr, SQL_ATTR_CONNECTION_TIMEOUT.
IM001 Il driver non supporta questa funzione (DM) Il driver associato a StatementHandle non supporta la funzione.
IM017 Il polling è disabilitato in modalità di notifica asincrona Ogni volta che viene usato il modello di notifica, il polling è disabilitato.
IM018 SQLCompleteAsync non è stato chiamato per completare l'operazione asincrona precedente su questo handle. Se la chiamata di funzione precedente sull'handle restituisce SQL_STILL_EXECUTING e se la modalità di notifica è abilitata, è necessario chiamare SQLCompleteAsync sull'handle per eseguire la post-elaborazione e completare l'operazione.

Commenti

SQLColumnPrivileges restituisce i risultati come set di risultati standard, ordinato per TABLE_CAT, TABLE_SCHEM, TABLE_NAME, COLUMN_NAME e PRIVILEGE.

Nota

SQLColumnPrivileges potrebbe non restituire privilegi per tutte le colonne. Ad esempio, un driver potrebbe non restituire informazioni sui privilegi per le pseudo-colonne, ad esempio Oracle ROWID. Le applicazioni possono usare qualsiasi colonna valida, indipendentemente dal fatto che venga restituita da SQLColumnPrivileges.

Le lunghezze delle colonne VARCHAR non vengono visualizzate nella tabella; le lunghezze effettive dipendono dall'origine dati. Per determinare le lunghezze effettive delle colonne CATALOG_NAME, SCHEMA_NAME, TABLE_NAME e COLUMN_NAME, un'applicazione può chiamare SQLGetInfo con le opzioni di SQL_MAX_CATALOG_NAME_LEN, SQL_MAX_SCHEMA_NAME_LEN, SQL_MAX_TABLE_NAME_LEN e SQL_MAX_COLUMN_NAME_LEN.

Nota

Per altre informazioni sull'utilizzo generale, gli argomenti e i dati restituiti delle funzioni del catalogo ODBC, vedere Funzioni del catalogo.

Le colonne seguenti sono state rinominate per ODBC 3.x. Le modifiche apportate al nome della colonna non influiscono sulla compatibilità con le versioni precedenti perché le applicazioni si associano per numero di colonna.

Colonna ODBC 2.0 ODBC 3.x colonna
TABLE_QUALIFIER TABLE_CAT
TABLE_OWNER TABLE_SCHEM

Nella tabella seguente sono elencate le colonne nel set di risultati. Le colonne aggiuntive successive alla colonna 8 (IS_GRANTABLE) possono essere definite dal driver. Un'applicazione deve ottenere l'accesso alle colonne specifiche del driver con il conteggio dalla fine del set di risultati anziché specificare una posizione ordinale esplicita. Per altre informazioni, vedere Dati restituiti dalle funzioni del catalogo.

Nome colonna Column number Tipo di dati Commenti
TABLE_CAT (ODBC 1.0) 1 Varchar Identificatore del catalogo; NULL se non applicabile all'origine dati. Se un driver supporta cataloghi per alcune tabelle ma non per altri, ad esempio quando il driver recupera i dati da diversi DBMS, restituisce una stringa vuota ("") per le tabelle che non dispongono di cataloghi.
TABLE_SCHEM (ODBC 1.0) 2 Varchar Identificatore dello schema; NULL se non applicabile all'origine dati. Se un driver supporta schemi per alcune tabelle ma non per altri, ad esempio quando il driver recupera i dati da diversi DBMS, restituisce una stringa vuota ("") per le tabelle che non dispongono di schemi.
TABLE_NAME (ODBC 1.0) 3 Varchar non NULL Identificatore di tabella.
COLUMN_NAME (ODBC 1.0) 4 Varchar non NULL Nome colonna. Il driver restituisce una stringa vuota per una colonna che non ha un nome.
GRANTOR (ODBC 1.0) 5 Varchar Nome dell'utente che ha concesso il privilegio; NULL se non applicabile all'origine dati.

Per tutte le righe in cui il valore nella colonna GRANTEE è il proprietario dell'oggetto, la colonna GRANTOR sarà "_SYSTEM".
GRANTEE (ODBC 1.0) 6 Varchar non NULL Nome dell'utente a cui è stato concesso il privilegio.
PRIVILEGE (ODBC 1.0) 7 Varchar non NULL Identifica i privilegi di colonna. Può essere uno dei seguenti (o altri supportati dall'origine dati quando è definita l'implementazione):

SELECT: l'utente autorizzato può recuperare i dati per la colonna.

INSERT: l'utente autorizzato può fornire dati per la colonna nelle nuove righe inserite nella tabella associata.

UPDATE: l'utente autorizzato può aggiornare i dati nella colonna.

RIFERIMENTI: l'utente autorizzato può fare riferimento alla colonna all'interno di un vincolo ( ad esempio, un vincolo di controllo di tabella, referenziale o univoco).
IS_GRANTABLE (ODBC 1.0) 8 Varchar Indica se l'utente autorizzato può concedere il privilegio ad altri utenti; "YES", "NO" o "NULL" se sconosciuto o non applicabile all'origine dati.

Un privilegio può essere concesso o non concesso, ma non entrambi. Il set di risultati restituito da SQLColumnPrivileges non conterrà mai due righe per le quali tutte le colonne, ad eccezione della colonna IS_GRANTABLE contengono lo stesso valore.

Esempio di codice

Per un esempio di codice di una funzione simile, vedere Funzione SQLColumns.

Per informazioni su Vedere
Associazione di un buffer a una colonna in un set di risultati Funzione SQLBindCol
Annullamento dell'elaborazione delle istruzioni Funzione SQLCancel
Restituzione delle colonne in una tabella o in tabelle Funzione SQLColumns
Recupero di un blocco di dati o scorrimento di un set di risultati Funzione SQLFetchScroll
Recupero di più righe di dati Funzione SQLFetch
Restituzione dei privilegi per una tabella o una tabella Funzione SQLTablePrivileges
Restituzione di un elenco di tabelle in un'origine dati Funzione SQLTables

Vedi anche

Riferimento API ODBC
File di intestazione ODBC