Akina, у меня есть решение, найденное кем-то давно в интернете и использованное в коде. Но на мой взгляд оно очень кривое и плюс еще нужен курсор. Если вам интересно выглядит оно так:
declare
@xml xml
,@xml_f xml
select @xml =
(
select CityID as "CityID"
,CarBrand as "CarBrand"
,CarModel as "CarModel"
,CarBodyType as "CarBodyType"
,CarYear as "CarYear"
,CarColor as "CarColor"
from TestAutoInfo
for xml path('data')
)
--выведем промежуточный XML
select @xml
declare @fields table(
id int not null
,fname varchar(100)
,flabel varchar(100)
)
insert into @fields(id, fname, flabel)
select 1, 'CityID', 'CityID'
union all
select 2, 'CarBrand', 'CarBrand'
union all
select 3, 'CarModel', 'CarModel'
union all
select 4, 'CarBodyType', 'CarBodyType'
union all
select 5, 'CarYear', 'CarYear'
union all
select 6, 'CarColor', 'CarColor'
--Какая-то неизвестная магия
set @xml_f = (
select c.col_name as 'field/@name'
,isnull(@xml.value('(//*[local-name()=sql:column("c.col_name")])[1]','varchar(max)'),'') as 'field'
from (select fname as col_name from @fields) c
for xml path(''), root('data')
)
--Выведем окончательный XML и поймем, что он обрабатывает только один блок, поэтому и нужен курсор
select @xml_f
Akina,
К сожалению, не устраивает, в том то и дело. Именно в этом формате мои данные должны обрабатываться на другой стороне.
Обычный вариант реализуется легко, но это не то, что нужно. Как это не прискорбно :)