2010-07-19 1 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, вы можете создать задачу сценария, которая записывает данные в файл в этом формате. –

ответ

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 начинает становиться большим. Если я SELECT *, чтобы получить 100 000 строк, которые я хочу в стандартном запросе, результаты возвращаются немедленно. Однако, если я выполняю конкатенированный запрос, как указано выше, и выберем только 10 из 50 нужных столбцов, запрос не хочет заканчиваться. Я отменил через 15 минут. Я попробую запустить его дольше, чем за одну ночь, когда у меня будет шанс, но это слишком долго, когда SELECT * возвращается мгновенно. Благодаря! Любые другие предложения были бы замечательными. –

+0

@SomeGuy - Да. Я не удивлен этим. Предложение Панагиотиса сделать это в SSIS кажется хорошим для меня. или, может быть, вы можете сделать запрос без ключа, а затем экспортировать результаты в текстовый файл. –

Смежные вопросы