从text-column中检索xml-data

时间:2012-04-05 06:35:22

标签: sql xml coldfusion

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

是否可以通过其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

此致

的Heiko

3 个答案:

答案 0 :(得分: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关键字添加到查询中。不确定这是否会对coldfusion产生影响。

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

答案 1 :(得分:0)

搞定了

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

诀窍

答案 2 :(得分:0)

这是一个更好的答案,因为它不依赖在以后的Coldfusion版本中可能会更改的字符串。

<cfoutput>#QueryName[QueryName.ColumnList][1]#</cfoutput>