Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Удалить часть данных из xml / 5 сообщений из 5, страница 1 из 1
14.06.2019, 11:15
    #39826484
gnatochka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удалить часть данных из xml
добрый день.
Помогите пожалуйста с запросом.

Есть xml вида
Код: xml
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.
<Заголовок>
	<Данные01>Инфо</Данные01>
	<Данные02>Инфо</Данные02>
	<Данные03>Инфо</Данные03>
	<Данные04>Инфо</Данные04>
	<Ветка01>
		<Данные01>Инфо</Данные01>
		<Данные01>Инфо</Данные01>
		<Ветка02>
			<Данные02>Инфо</Данные02>
		</Ветка02>
	</Ветка01>
	<Ветка03>Инфо</Ветка03>
	<Ветка04>
		<Ветка05>
			<Данные01>Инфо в рублях</Данные01>
			<Валюта>643</Валюта>
		</Ветка05>
		<Ветка05>
			<Данные01>Инфо в долларах</Данные01>
			<Валюта>840</Валюта>
		</Ветка05>
		<Ветка05>
			<Данные01>Инфо в рублях</Данные01>
			<Валюта>643</Валюта>
		</Ветка05>
		<Ветка05>
			<Данные01>Инфо в рублях</Данные01>
			<Валюта>643</Валюта>
		</Ветка05>
	</Ветка04>
</Заголовок>



Необходимо из него удалить данные /Заголовок/Ветка04/Ветка05/Валюта=643

т.е. на выходе нужен xml
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
<Заголовок>
	<Данные01>Инфо</Данные01>
	<Данные02>Инфо</Данные02>
	<Данные03>Инфо</Данные03>
	<Данные04>Инфо</Данные04>
	<Ветка01>
		<Данные01>Инфо</Данные01>
		<Данные01>Инфо</Данные01>
		<Ветка02>
			<Данные02>Инфо</Данные02>
		</Ветка02>
	</Ветка01>
	<Ветка03>Инфо</Ветка03>
	<Ветка04>
		<Ветка05>
			<Данные01>Инфо в долларах</Данные01>
			<Валюта>840</Валюта>
		</Ветка05>
	</Ветка04>
</Заголовок>
...
Рейтинг: 0 / 0
14.06.2019, 11:26
    #39826487
buser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удалить часть данных из xml
gnatochka,
Код: 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.
declare @xml xml = N'<Заголовок>
	<Данные01>Инфо</Данные01>
	<Данные02>Инфо</Данные02>
	<Данные03>Инфо</Данные03>
	<Данные04>Инфо</Данные04>
	<Ветка01>
		<Данные01>Инфо</Данные01>
		<Данные01>Инфо</Данные01>
		<Ветка02>
			<Данные02>Инфо</Данные02>
		</Ветка02>
	</Ветка01>
	<Ветка03>Инфо</Ветка03>
	<Ветка04>
		<Ветка05>
			<Данные01>Инфо в рублях</Данные01>
			<Валюта>643</Валюта>
		</Ветка05>
		<Ветка05>
			<Данные01>Инфо в долларах</Данные01>
			<Валюта>840</Валюта>
		</Ветка05>
		<Ветка05>
			<Данные01>Инфо в рублях</Данные01>
			<Валюта>643</Валюта>
		</Ветка05>
		<Ветка05>
			<Данные01>Инфо в рублях</Данные01>
			<Валюта>643</Валюта>
		</Ветка05>
	</Ветка04>
</Заголовок>'

SELECT @xml  
  
-- delete an attribute  
SET @xml.modify(N'  
  delete /Заголовок/Ветка04/Ветка05[./Валюта = "643"]  
')  
SELECT @xml



XML Data Modification Language (XML DML)
...
Рейтинг: 0 / 0
14.06.2019, 11:43
    #39826493
gnatochka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удалить часть данных из xml
buser, спасибо
Вот так получилось
Код: sql
1.
SET @xml.modify('delete /Заголовок/Ветка05[Валюта=643]')  


Подскажите пожалуйста а можно как то переменную использовать?

Код: sql
1.
2.
3.
DECLARE @Cur int
SET @Cur = 840
SET @xml.modify('delete /Заголовок/Ветка05[Валюта=@Cur]')  
...
Рейтинг: 0 / 0
14.06.2019, 11:47
    #39826501
buser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удалить часть данных из xml
gnatochka, да автор = sql:variable("@Cur")
...
Рейтинг: 0 / 0
14.06.2019, 11:51
    #39826505
gnatochka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удалить часть данных из xml
buser, спасибо, все получилось.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Удалить часть данных из xml / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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