0

我有一个包含 xml 文件的字段(数据类型“文本”)的表。经过一些尝试和错误,我发现从该表中获取完整 xml 文件的唯一方法是使用 ms sql 的“FOR XML”子句。但我的下一个问题是,包含 xml 文件的列的名称类似于“XML_F52E2B61-18A1-11D1-B105-00805F49916B”,这是 cf 的无效标识符。

有没有办法通过它的 id 而不是它的名称来访问该列,或者访问该列的最佳方式是什么?

编辑:我使用的 SQL 语句是:

SELECT XmlPackage
FROM LogK3OnChange 
WHERE DealerID = IsNull(<cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.dealerid#">, DealerID)
AND LogID = <cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.logid#">
FOR XML RAW

问候,

平子

4

3 回答 3

2

如果您将查询嵌入到子查询中,您可以为列命名。

select
  (
    select *
    from YourTable
    for xml path('Row'), root('Root')
  ) as NewColumnName

根据您的查询:

SELECT
  (
    SELECT XmlPackage
    FROM LogK3OnChange 
    WHERE DealerID = IsNull(<cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.dealerid#">, DealerID)
          AND LogID = <cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.logid#">
    FOR XML PATH
  ) AS NewColumnName

更新:
如果您希望列是 XML 数据类型,则应将type关键字添加到查询中。不确定这是否会对冷融合产生影响。

SELECT
  (
    SELECT XmlPackage
    FROM LogK3OnChange 
    WHERE DealerID = IsNull(<cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.dealerid#">, DealerID)
          AND LogID = <cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.logid#">
    FOR XML PATH, TYPE
  ) AS NewColumnName
于 2012-04-05T06:48:27.797 回答
0

知道了

<cfoutput>#myQuery["XML_F52E2B61-18A1-11D1-B105-00805F49916B"][1]#</cfoutput>

成功了

于 2012-04-05T21:14:40.543 回答
0

这是一个更好的答案,因为它不依赖于可能在以后的冷融合版本中发生变化的字符串。

<cfoutput>#QueryName[QueryName.ColumnList][1]#</cfoutput>
于 2019-12-31T22:47:32.097 回答