2012-02-01 24 views
3

我試圖使用SSIS將查詢結果集的XML表示提取到文本文件。我的查詢目前正在成功提取我在SSMS中運行時所需的確切XML輸出。我已經嘗試了每個技巧,我可以找到使用SSIS包中的這個結果集來創建一個文件。使用SSIS將表格數據的XML表示提取到文件

使用數據流將OLE源移植到Flat文件不起作用,因爲XML查詢的輸出被視爲TEXT,並且SSIS無法將TEXT,NTEXT或IMAGE推送到文件目標。

我試過然後執行SQL任務來填充用戶變量,然後使用腳本任務(用C#編寫)將此用戶變量的內容寫入文件輸出,但用戶變量始終爲空。我不知道,但我懷疑這又是因爲XML被視爲TEXT或IMAGE,並且用戶變量不處理這個問題。

查詢處於這種形式: SELECT * FROM 的dataTable WHERE dataTable.FIELD = '值' FOR XML AUTO,ROOT( 'RootVal')

將所得數據集以及形成XML,但我無法弄清楚如何從結果集到文件。

對於我來說編寫一個控制檯應用程序來在C#4.0中執行此操作是一件相對容易的任務,但限制要求我至少在編寫控制檯應用程序和調度程序之前證明它不能用SSIS完成。

+1

難道是完全擊敗練習的要點做這一切的腳本任務?如果它可以在控制檯應用程序中完成,則可以在腳本任務中完成... – GarethD 2012-02-01 23:09:10

回答

3

對不起,但有一個SSIS選項:Export Column Transformation

我所定義的OLE DB查詢與

SELECT 
    * 
FROM 
(
    SELECT * FROM dbo.spt_values FOR XML AUTO, ROOT('RootVal') 
) D (xml_node) 
CROSS APPLY 
(
    SELECT 'C:\ssisdata\so_xmlExtract.xml' 
) F (fileName) 

這導致1行和數據流2列。然後我連接導出列轉換,並與xml_node提取塔fileName文件路徑列有線起來

晴截斷結果如下

<RootVal> 
    <dbo.spt_values name="rpc" number="1" type="A " status="0"/> 
    <dbo.spt_values name="dist" number="8" type="A " status="0"/> 
    <dbo.spt_values name="deferred" number="8192" type="V " low="0" high="1" status="0"/> 
</RootVal> 

更詳細的答案,用圖片,可以在這個Q & A Export Varbinary(max) column with ssis

+0

工程就像一個魅力。可能是有史以來最不直觀的解決方案,但我很高興有人知道如何做到這一點。 – urbadave 2012-02-02 17:13:00

+0

問題和此答案涉及如何將XML數據導出到平面文件。不要關注提供的查詢以及它如何被重寫。它的存在只是爲了給未來的讀者一個可重複的參考點。 OP沒有提供查詢,所以這個作爲替代品存在。 – billinkc 2013-10-02 20:36:52

0

BillInKC的答案是我見過的最好的,但SQL可以簡化(不需要fo [R交叉適用):

SELECT X.*, 'output.xml' AS filename 
FROM (SELECT * FROM #t FOR XML PATH('item'), ROOT('itemList')) AS X (xml_node) 

它會輸出相同的結構:

xml_node           filename 
-------------------------------------------------- ---------- 
<itemList><item><num>1000</num></item></itemlist> output.xml 

(1 row(s) affected) 
+0

不愉快的downvoter嘗試查詢失敗嗎?這個問題是什麼? – ajeh 2015-03-10 16:05:48

相關問題