2012-04-27 2 views
1

У меня есть простой SELECT заявление, которое выбирает несколько столбцов из одной таблицы:Выбор нескольких столбцов результирующего набора в XML

SELECT id, name, phone, address 
FROM tmp_user 

Можно ли изменить этот запрос, так что только id и name в выберите а остальные детали находятся в узле xml?

Я ожидал, что выход из этого выбора должно быть

id name  extra data 
1 Shreedhar <data><phone>...</phone><address>...</address></data> 
2 John Doe <data><phone>...</phone><address>...</address></data> 
3 Jane Doe <data><phone>...</phone><address>...</address></data> 

Последний столбец возвращаемой таблицы должны иметь тип XML с необходимыми данными. Я знаю, как весь набор результатов можно преобразовать в XML, используя FOR XML. Однако я ищу только часть столбцов, которые нужно преобразовать. Является ли это возможным?

+0

Не могли бы вы предоставить DML и данные для тестирования? –

ответ

1

Обязательно! Нет проблем - попробуйте что-то вроде этого:

SELECT 
    id, name, 
    (SELECT phone, address 
    FROM dbo.tmp_user u2 
    WHERE u2.id = u1.id 
    FOR XML PATH('data')) AS 'ExtraData' 
FROM  
    dbo.tmp_user u1 

Это дает мне результат, очень похожий на тот, который вы ищете.

enter image description here

+2

Аккуратно, работает по мере необходимости. Почему я не подумал об этом сам :( –

+0

И спасибо за редактирование вопроса Редактирование замечательно –

+0

Мне также нужно добавить пространство имен в xml. Что-то вроде ...

...
кто-нибудь есть идеи, как это сделать? Так как оператор выбора вложен я не могу использовать с XMLNAMESPACES. – rageit

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