所以这是我的情况。
我必须使用一些遗留代码。这段代码给了我一个查询对象,我必须附加一些行。基本上,我需要复制 1 行 N 次(N 不是常数),然后手动调整一些数据。
现在,至少 IMO 我正在做的事情确实不是正确的做事方式。我宁愿返回一个在 CF 端不需要修改的查询对象,并在数据库上生成正确的数据集。但是,唉,我无法访问原始查询:(
所以这是我的裂缝。我决定编写一个复制查询行的通用函数,然后我可以在附加副本后手动设置我需要的任何单元格。
请看下面:
private function duplicateQueryRow(
required query originalQuery,
required numeric rowNum
) {
queryAddRow(arguments.originalQuery, 1);
for (local.i = 1; local.i LTE listLen(originalQuery.columnList); local.i += 1) {
columnName = listGetAt(originalQuery.columnlist, i);
querySetCell(originalQuery, columnName, originalQuery[columnName][rowNum], originalQuery.recordcount);
}
}
问题:
假设某些列是 NULL。例如,假设第 5 行的 ACOLUMN 列的值为 NULL。当我这样做时,由于 CF 不处理 NULL,最后一行的 ACOLUMN 值将为 ""。现在,如果我这样做,select distinct ACOLUMN from QUERY_NAME
我将得到第 5 行和自 以来的最新行NULL <> [empty string]
。
我确实有一个解决方案,如下所示:
private function duplicateQueryRow(
required query originalQuery,
required numeric rowNum
) {
queryAddRow(arguments.originalQuery, 1);
for (local.i = 1; local.i LTE listLen(originalQuery.columnList); local.i += 1) {
columnName = listGetAt(originalQuery.columnlist, i);
if (originalQuery[columnName][rowNum] NEQ "") {
querySetCell(originalQuery, columnName, originalQuery[columnName][rowNum], originalQuery.recordcount);
}
}
}
这行得通,因为现在不会复制 NULL,但我只是不相信这是正确的....
想知道是否有人有更好的解决方案?或者至少看看这个功能是否有问题。我想的要求是对于给定查询和要复制的 rowNumber 的函数将返回查询,并在末尾带有查询的 rowNumber 行的副本。
提前致谢!