2010-07-19 38 views
1

從SQL Server 2005開始,我需要爲客戶端導出一個類似xml的格式,如下所示。爲什麼他們不使用XML,我不知道。有關如何在不導出文件「FOR XML」的情況下快速執行此操作的任何想法,然後編寫一個混亂的腳本來瀏覽文本文件並查找並替換<,>和每個關閉的XML標記?謝謝。SQL Server - 以無標籤的XML格式導出?

START_FILE: 
DATE: 
COLUMN1:A 
COLUMN2:B 
COLUMN3:C 
COLUMN1:D 
COLUMN2:E 
COLUMN3:F 
COLUMN1:G 
COLUMN2:H 
COLUMN3:I 
END_FILE: 
+1

這是純文本格式。你甚至不應該考慮XML。由於您使用的是SSIS,因此您可以創建一個腳本任務,以這種格式將數據寫入文件。 – 2010-07-19 12:59:59

回答

0

我去嘗試的UNPIVOT查詢,這是我的全部新馬丁的建議。使用SSIS,我現在將查詢導出到一個文本文件,格式完全符合我需要它的幾秒鐘的運行時間。我正在使用下面的查詢,以「:」作爲列分隔符。偉大的建議馬丁!

SELECT 'START_FILE' as FieldName, '' as 'FieldValue' 
UNION ALL 
select 'DATE' as FieldName, getDate() as 'FieldValue' 

UNION ALL 

SELECT FieldName, FieldValue 
FROM 
    (
    SELECT 
    Cast(Column1Name as varchar) as VendorColumn1Name, 
    Cast(Column2Name as varchar) as VendorColumn2Name, 
    Cast(Column3Name as varchar) as VendorColumn3Name 
    FROM MyTable 
    ) c 
    UNPIVOT 
    (
    FieldValue for FieldName IN(VendorColumn1Name, VendorColumn2Name, VendorColumn3Name) 
    ) as p 

UNION ALL 
SELECT 'END_FILE' as FieldName, '' as 'FieldValue' 
1
DECLARE @Output nvarchar(max) 
SET @Output = 'START_FILE: 
DATE:' 

SELECT @Output = @Output + ' 
COLUMN1:' + Col1 + ' 
COLUMN2:' + Col2 + ' 
COLUMN3:' + Col3 
FROM YourTable 
ORDER BY Col1 

SELECT @Output + ' 
END_FILE:' AS Result 
+0

級聯是這種類型的查詢的好主意。然而,一旦@Output開始變大,這似乎是非常需要CPU的。如果我在標準查詢中選擇*以獲得100,000行,結果會立即返回。但是,如果我像上面那樣運行查詢級聯,並且只選擇50個所需列中的10個,則查詢不想完成。 15分鐘後我取消了。當我有機會的時候,我會嘗試運行它的時間超過一夜,但是當SELECT *立即回來時,這似乎太長了。謝謝!任何進一步的建議都會很棒。 – 2010-07-19 19:30:05

+0

@SomeGuy - 是的。我對此並不感到驚訝。 Panagiotis在SSIS中提出的建議對我來說似乎是一個很好的建議。或者你可以做一個不透明的查詢,然後將結果導出到一個文本文件中。 – 2010-07-19 19:49:13