powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Помогите разобраться с xml explicit
3 сообщений из 3, страница 1 из 1
Помогите разобраться с xml explicit
    #39671675
Дед-Папыхтет
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хочу сформировать такой 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
Помогите разобраться с xml explicit
    #39671692
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
Помогите разобраться с xml explicit
    #39671700
Дед-Папыхтет
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm,

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


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