2012-04-05 64 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