Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / FROM OPENXML выбирает из тега только первую запись, хотя их несколько. Что не так? / 3 сообщений из 3, страница 1 из 1
05.03.2021, 10:33
    #40050974
m830
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FROM OPENXML выбирает из тега только первую запись, хотя их несколько. Что не так?
Имею 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
05.03.2021, 10:45
    #40050992
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FROM OPENXML выбирает из тега только первую запись, хотя их несколько. Что не так?
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
05.03.2021, 15:29
    #40051106
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
FROM OPENXML выбирает из тега только первую запись, хотя их несколько. Что не так?
m830
возвращает только первую запись из тега

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


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