powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / FROM OPENXML выбирает из тега только первую запись, хотя их несколько. Что не так?
3 сообщений из 3, страница 1 из 1
FROM OPENXML выбирает из тега только первую запись, хотя их несколько. Что не так?
    #40050974
m830
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имею XML
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
<registry_record>
      <cad_links>
        <old_numbers>
          <old_number>
            <number>037:015-6893</number>
            <number_type>
              <code>01</code>
              <value>Инвентарный номер</value>
            </number_type>
          </old_number>
          <old_number>
            <number>50-50-50/021/2011-160</number>
            <number_type>
              <code>02</code>
              <value>Условный номер</value>
            </number_type>
          </old_number>
        </old_numbers>
      </cad_links>
</registry_record>



Запрос
Код: sql
1.
2.
3.
4.
5.
6.
7.
	SELECT 
		*
	FROM OPENXML (@docHandle, '/registry_record/.')  
		WITH (
			  [Number]    nvarchar(50)	'./*/*/cad_links/old_numbers/old_number/number',
			  [code]      nvarchar(50)	'./*/*/cad_links/old_numbers/old_number/number_type/code'
		      )


возвращает только первую запись из тега

Код: sql
1.
2.
Number		Code
037:015-6893	01
...
Рейтинг: 0 / 0
FROM OPENXML выбирает из тега только первую запись, хотя их несколько. Что не так?
    #40050992
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m830,

как-то так видимо надо

Код: 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.
DECLARE @DocHandle int  
DECLARE @XmlDocument nvarchar(1000)  
SET @XmlDocument = N'<registry_record>
      <cad_links>
        <old_numbers>
          <old_number>
            <number>037:015-6893</number>
            <number_type>
              <code>01</code>
              <value>Инвентарный номер</value>
            </number_type>
          </old_number>
          <old_number>
            <number>50-50-50/021/2011-160</number>
            <number_type>
              <code>02</code>
              <value>Условный номер</value>
            </number_type>
          </old_number>
        </old_numbers>
      </cad_links>
</registry_record>';

EXEC sp_xml_preparedocument @DocHandle OUTPUT, @XmlDocument  

	SELECT 
		*
	FROM OPENXML (@DocHandle, 'registry_record/cad_links/old_numbers/old_number/.')  
		WITH (
			  [Number]    nvarchar(50)	'number/.',
			  [code]      nvarchar(50)	'number_type/code/.'
		      )

EXEC sp_xml_removedocument @DocHandle  
...
Рейтинг: 0 / 0
FROM OPENXML выбирает из тега только первую запись, хотя их несколько. Что не так?
    #40051106
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m830
возвращает только первую запись из тега

Ну потому что для openxml задан путь, отбирающий любой дочерний узел корневого узла. В указанном XML такой дочерний узел только один. Указанные пути для полей выборки вычисляются только для этого узла.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / FROM OPENXML выбирает из тега только первую запись, хотя их несколько. Что не так?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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