2012-04-05 35 views
0

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

有没有办法通过它的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 

问候,

海科

回答

0

得到它

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

的伎俩

1

如果嵌入在一个子查询查询你可以给你列名称。

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 
+0

对不起,似乎因为我得到这样一个不完整的XML文件无法正常工作。 – Ostfriese 2012-04-05 06:56:10

+0

它是否缺少根元素? – 2012-04-05 06:57:37

+0

不,它只是在文件 – Ostfriese 2012-04-05 06:59:38