Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите разобраться с xml explicit / 3 сообщений из 3, страница 1 из 1
09.07.2018, 15:49
    #39671675
Дед-Папыхтет
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться с xml explicit
Хочу сформировать такой XML:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
<msg id="1">
  <row lang="ru" msg="Пользователь=[1] не играет в игре id=[2]">
    <param>Вася</param>
  </row>
  <row lang="en" msg="User name=[1] does not play in the game id=[2]">
    <param>Vasa</param>
    <param>7777</param>
  </row>
</msg>


Код: xml
1.
2.
3.
4.
<msg id="2">
  <row lang="ru" msg="Ошибка" />
  <row lang="en" msg="Error" />
</msg>


из таких данных:
Код: plaintext
1.
2.
3.
4.
5.
id	lang	msg	param
1	en	User name=[1] does not play in the game id=[2]	Vasa
1	en	User name=[1] does not play in the game id=[2]	7777
1	ru	Пользователь=[1] не играет в игре id=[2]	Вася
2	ru	Ошибка						NULL
2	en	Error						NULL
Т.е. первый тег msg с аттрибутом id, далее вложенный row, в row аттрибут lang, ну и параметры уже как элементы вложенные в 3й уровень... Читаю БОЛ с эксплисит... нифига не получается. Подскажите или запрос как корректно нарисовать или какую то документацию понятную на примерах?
запрос такой...
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
if object_id('tempdb..#t') is not null drop table #t
select
	 m.*
	,p.param
into #t
from
(
	values
	 (1,'en','User name=[1] does not play in the game id=[2]')
	,(1,'ru','Пользователь=[1] не играет в игре id=[2]')
	,(2,'ru','Ошибка')
	,(2,'en','Error')
) m(id,lang,msg)
left join
(
	values
	 (1,'en','Vasa')
	,(1,'en','7777')
	,(1,'ru','Вася')
) p(id, lang, param)
	on m.id = p.id
	and m.lang = p.lang


select distinct
	 1 as Tag
	,null as Parent
	,id as [msg!1!id]
	,null as [msg!2!row!element]
	,lang as [msg!2!lang]
	,msg as [msg!2!msg]
	,param as [msg!3!param!element]
from #t
union all
select distinct
	 2 as Tag
	,1 as Parent
	,null
	,id
	,lang
	,msg
	,param
from #t
union all
select distinct
	 3 as Tag
	,2 as Parent
	,id
	,null
	,lang
	,msg
	,param
from #t
for xml explicit

declare @x xml = '
<msg id="1">
	<row lang="ru" msg="Пользователь=[1] не играет в игре id=[2]">
		<param>Вася</param>
	</row>
	<row lang="en" msg="User name=[1] does not play in the game id=[2]">
		<param>Vasa</param>
		<param>7777</param>
	</row>
</msg>
<msg id="2">
	<row lang="ru" msg="Ошибка" />
	<row lang="en" msg="Error" />
</msg>'
select @x

...
Рейтинг: 0 / 0
09.07.2018, 16:23
    #39671692
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться с xml explicit
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
declare @t table (id int, lang varchar(10), msg varchar(100), param varchar(100));

insert into @t
values
(1, 'en', 'User name=[1] does not play in the game id=[2]', 'Vasa'),
(1, 'en', 'User name=[1] does not play in the game id=[2]', '7777'),
(1, 'ru', 'Пользователь=[1] не играет в игре id=[2]', 'Вася'),
(2, 'ru', 'Ошибка', NULL),
(2, 'en', 'Error', NULL);

select
 a.id as [@id], d.x as [*]
from
 (select distinct id from @t) a cross apply
 (
  select
   lang as [@lang], msg as [@msg], c.x as [*]
  from
   (select distinct lang, msg from @t where id = a.id) b cross apply
   (select param from @t where id = a.id and lang = b.lang and msg = b.msg for xml path(''), type) c(x)
  for xml path('row'), type
 ) d(x)
for xml path('msg'), type;
...
Рейтинг: 0 / 0
09.07.2018, 16:35
    #39671700
Дед-Папыхтет
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите разобраться с xml explicit
invm,

Спасибо большое...
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите разобраться с xml explicit / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]