powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / вопрос про OPENXML
5 сообщений из 5, страница 1 из 1
вопрос про OPENXML
    #40130375
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите пожалуйста, как изящнее всего можно решить следующий вопрос
Есть xml примерно такого вида

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
        <FIRST>
        	<DATA>2021-11-21</DATA>
        	<NUM>NUM1</NUM>
        	<SECOND>
        		<SECOND_NAME>AAA</SECOND_NAME>
        		<SECOND_DATE>2019-10-01</SECOND_DATE>
        		<METHOD>2</METHOD>
        	</SECOND>        	
        	<SECOND>
        		<SECOND_NAME>BBB</SECOND_NAME>
        		<SECOND_DATE>2019-10-01</SECOND_DATE>
        		<METHOD>3</METHOD>
        	</SECOND>        	
        </FIRSR>
        <FIRST>
        	<DATA>2021-11-22</DATA>
        	<NUM>NUM2</NUM>
        </FIRST>        



При разборе данных через OPENXML я спокойно получаю 2 записи элементов FIRST и 2 элемента SECOND, но у записей нет никакой информации для связи. Т.е таблица в которую я складирую элементы SECOND не имеет никаких id по которым я могу связать ее с таблицей в которой хранятся данные FIRST. Уникальный идентификатор есть уровнем выше (это фрагмент xml ниже), но он получается единым и для элементов FIRST и для SECOND. Как я могу правильно сгенерировать какие-то значения для обоих таблиц по которым я могу четко их связать?
...
Рейтинг: 0 / 0
вопрос про OPENXML
    #40130398
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.
24.
25.
26.
27.
28.
29.
30.
31.
32.
declare @h int, @x xml ='<ROOT><FIRST>
        	<DATA>2021-11-21</DATA>
        	<NUM>NUM1</NUM>
        	<SECOND>
        		<SECOND_NAME>AAA</SECOND_NAME>
        		<SECOND_DATE>2019-10-01</SECOND_DATE>
        		<METHOD>2</METHOD>
        	</SECOND>        	
        	<SECOND>
        		<SECOND_NAME>BBB</SECOND_NAME>
        		<SECOND_DATE>2019-10-01</SECOND_DATE>
        		<METHOD>3</METHOD>
        	</SECOND>        	
        </FIRST>
        <FIRST>
        	<DATA>2021-11-22</DATA>
        	<NUM>NUM2</NUM>
        </FIRST></ROOT>';

exec sys.sp_xml_preparedocument @h output, @xml;

select * from openxml(@h, '/ROOT/FIRST') with (NUM varchar(30) 'NUM', DATA varchar(30) 'DATA');
select * from openxml(@h, '/ROOT/FIRST/SECOND')
with
(
 NUM varchar(30) '../NUM',
 SECOND_NAME varchar(30) 'SECOND_NAME',
 SECOND_DATE varchar(30) 'SECOND_DATE',
 METHOD varchar(30) 'METHOD'
);

exec sys.sp_xml_removedocument @h;
...
Рейтинг: 0 / 0
вопрос про OPENXML
    #40130400
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если NUM не является каким-то уникальным значением? Чисто технически разными может быть дата, а NUM одинаковым. Я привел скорее некий суррогатный пример, а возможно ли сгенерировать какие-то уникальные идентификаторы самому? Т.е добавить какое-то поле в первую таблицу и ссылаться на это значение во второй?
...
Рейтинг: 0 / 0
вопрос про OPENXML
    #40130401
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
энди
а возможно ли сгенерировать какие-то уникальные идентификаторы самому?

Самому ничего генерить не нужно, это делает OPENXML: https://docs.microsoft.com/en-us/sql/relational-databases/xml/specify-metaproperties-in-openxml?view=sql-server-ver15 - см. описание метасвойства @mp:id
...
Рейтинг: 0 / 0
вопрос про OPENXML
    #40130408
энди
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ооо, огроменное спасибо, пошел читать и пробовать :)
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / вопрос про OPENXML
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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