Sql server Q-of-Q不考虑列顺序

Sql server Q-of-Q不考虑列顺序,sql-server,coldfusion,qoq,coldfusion-2016,Sql Server,Coldfusion,Qoq,Coldfusion 2016,我使用CFSPREADSHEET将XLS文件读取到查询中。然后根据需要对列重新排序。但是,我使用的查询保留了按字母顺序排列的列顺序 XLS文件中的字段顺序正确,但转换为查询时,字段按字母顺序排列 我使用将结果输出到CSV,字段仍然按字母顺序排列,以证明q-of-q不符合我的请求 为了纠正这个问题,我尝试使用q-of-q来按正确的顺序重新格式化列 <cfspreadsheet action="read" src="#local.tmpPath##local.tmpFile#" exclude

我使用CFSPREADSHEET将XLS文件读取到查询中。然后根据需要对列重新排序。但是,我使用的查询保留了按字母顺序排列的列顺序

XLS文件中的字段顺序正确,但转换为查询时,字段按字母顺序排列

我使用将结果输出到CSV,字段仍然按字母顺序排列,以证明q-of-q不符合我的请求

为了纠正这个问题,我尝试使用q-of-q来按正确的顺序重新格式化列

<cfspreadsheet action="read" src="#local.tmpPath##local.tmpFile#" excludeheaderrow="true" headerrow="1" sheet="1" query="local.qTemp" />

<!--- Change column order around as necessary --->
<cfquery name="local.qTemp" dbtype="query">
    SELECT
            Name, Address, City
    FROM
            [local].qTemp
</cfquery>

<cfset local.newCSV = QueryToCSV(
    query = local.qTemp,
    fields = local.qTemp.columnlist,
    createHeaderRow = true,
    delimiter = '|'
) />

<cffile action="write" charset="windows-1252" file="#local.tmpPath#foo.csv" output="#replace(local.newCSV, """", "", "ALL")#" nameconflict="overwrite" />
输出时的列顺序为:

地址、城市、姓名 而不是查询顺序:

姓名、地址、城市 我读了这篇关于这个主题的文章,但它并没有专门针对我的问题,除非我读错了。

你可以使用

从评论中

QoQ实际上与问题无关。原始查询也会出现同样的问题。不幸的是,query.columnList总是按字母顺序列出列。这是许多CF开发人员长期以来的抱怨。要获得真正的订单,您必须使用不同的技术,例如:

未记录的query.getColumnNames方法或 根据结果建立自己的列表


为什么列顺序很重要?如何使用查询中的数据调用批量插入方法?这里我要说的是,当您使用特定的列名输出查询结果时,您可以定义顺序。批量插入所需的最终格式是什么?请参阅Ohh。。。刚刚看到了CSV代码的最新更新。QoQ实际上与问题无关。这就是为什么我一直要求查看相关的文本文件/批量插入代码;-原始查询也会出现同样的问题。query.columnList始终按字母顺序列出查询列。这是许多CF开发人员长期以来的抱怨。要获得真正的顺序,您必须使用undocumented query.getColumnNames,或者从GetMetaData构建自己的列表。
columns = [];
getMetaData(qry).each(function(elem,index){
    arrayAppend(columns, elem.name);
});
writeDump(var=arrayToList(columns), label="Real Column Order");