Le tag CFQUERY a été étendu:
1°) vous pouvez ajouter un paramètre 'result="monObject"' qui créera donc une structure contenant les infos CACHED, COLUMNLIST, EXECUTIONTIME, RECORDCOUNT et SQL
2°) vous pouvez utiliser la fonction getMetaData(QUERY) qui renvoie un array de structures avec les infos suivantes à propos des colonnes de votre query : IsCaseSensitive, Name et TypeName qui spécifie le type de données. Je regrette qu'il n'aient pas ajouté des infos du genre isNullable, size ...
Par contre, ce qui est sympa c'est que les colonnes sont triées dans l'ordre ou elles sont créées dans la DB, contrairement à query.columnNames qui les triait par ordre alphabétique.
Un peu de code exemple:
<cfquery name="getTablesNew" datasource="DEV" result="res" maxRows=3>
select * from sys.systables, sys.sysschemas
where sys.systables.schemaid = sys.sysschemas.schemaid
</cfquery>
<cfdump var="#getTablesNew#">
<cfdump var="#res#">
<cfdump var="#getMetaData(getTablesNew)#">
src: Raymond Camden's Blog