Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / OPENXML / 6 сообщений из 6, страница 1 из 1
10.12.2001, 14:27
    #32018705
Terol
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OPENXML
Никак не могу выбрать значение элементов из XML

declare @doc varchar(1000)
set @doc = '
<ROOT>
<seat_type_id>NORM</seat_type_id>
<seat_type_id>NSSD</seat_type_id>
</ROOT>
'
declare @idoc int
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
select * from
OPENXML(@idoc, '/ROOT/*', 2)
with (seat_type_id varchar(40) 'seat_type_id')
EXEC sp_xml_removedocument @idoc

выдаёт 2 записи с NULL и всё
...
Рейтинг: 0 / 0
10.12.2001, 14:48
    #32018709
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OPENXML
"DECLARE @idoc int
DECLARE @doc varchar(1000)
SET @doc ='
<ROOT>
<Customer CustomerID="VINET" ContactName="Paul Henriot">
<Order CustomerID="VINET" EmployeeID="5" OrderDate="1996-07-04T00:00:00">
<OrderDetail OrderID="10248" ProductID="11" Quantity="12"/>
<OrderDetail OrderID="10248" ProductID="42" Quantity="10"/>
</Order>
</Customer>
<Customer CustomerID="LILAS" ContactName="Carlos Gonzlez">
<Order CustomerID="LILAS" EmployeeID="3" OrderDate="1996-08-16T00:00:00">
<OrderDetail OrderID="10283" ProductID="72" Quantity="3"/>
</Order>
</Customer>
</ROOT>'
--Create an internal representation of the XML document.
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
-- Execute a SELECT statement that uses the OPENXML rowset provider.
SELECT *
FROM OPENXML (@idoc, '/ROOT/Customer',1)
WITH (CustomerID varchar(10),
ContactName varchar(20))

If the same SELECT statement is executed with flags set to 2, indicating element-centric mapping, the values of CustomerID and ContactName for both of the customers in the XML document are returned as NULL, because the <Customers> elements do not have any subelements.
"

Это не про ваш случай ?
...
Рейтинг: 0 / 0
10.12.2001, 15:13
    #32018714
Terol
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OPENXML
Неа . .пробовал я и с 2 .. та же ерунда, 2 NULL записи
...
Рейтинг: 0 / 0
10.12.2001, 15:30
    #32018719
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OPENXML
Дело в том, что МС не признаёт синтаксис вида:
<ROOT>
<seat_type_id>NORM</seat_type_id>
<seat_type_id>NSSD</seat_type_id>
</ROOT>
Он не генерится с помощью FOR XML и не распознаётся OPENXML
Можно использовать только:
<ROOT>
<seat_type_id id="NORM"/>
<seat_type_id id="NSSD"/>
</ROOT>

declare @doc varchar(1000)
set @doc = '
<ROOT>
<seat_type_id id="NORM"/>
<seat_type_id id="NSSD"/>
</ROOT>
'

declare @idoc int

EXEC sp_xml_preparedocument @idoc OUTPUT, @doc

select * from
OPENXML(@idoc, '/ROOT/seat_type_id', 2)
with (
id varchar(40) '@id'
)

EXEC sp_xml_removedocument @idoc

Единственный выход - OPENXML без with:
select *
into #temp
from OPENXML(@idoc, '/ROOT', 2)
и анализировать #temp самому.
...
Рейтинг: 0 / 0
13.12.2001, 08:14
    #32018827
MIKLUHA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OPENXML
Здравствуйте.

Попробуйте вот так:

declare @doc varchar(1000)

set @doc = '
<ROOT>
<seat_type_id>NORM</seat_type_id>
<seat_type_id>NSSD</seat_type_id>
</ROOT>
'
declare @idoc int
EXEC sp_xml_preparedocument @idoc OUTPUT, @doc
select * from

OPENXML(@idoc, '//seat_type_id', 2)
with (seat_type_id varchar(40) '.')

EXEC sp_xml_removedocument @idoc


Желаю успехов.
...
Рейтинг: 0 / 0
13.12.2001, 08:52
    #32018832
Terol
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
OPENXML
Получилось! спасибо!
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / OPENXML / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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