Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 ? по OPENXML  [new]
Гулин Федор
Member

Откуда: МИНСК
Сообщений: 1316
Добрый день всем.
Примеры из МСДН по OPENXML работают ок.

DECLARE @idoc INT
declare @xml nvarchar(max)
EXEC sp_xml_preparedocument @idoc OUTPUT ,@xml

SELECT * FROM OPENXML (@idoc, '/rdcData/entity', 1)

а с моим xml чего то не могу получить ничего
вижу что структура xml немного отличается (похоже в этом и проблема)
- но сообразить не могу как мне достать скажем атрибуты entity для начала ?

<rdcData version="1.0" target="NDARDC">
<entity type="C" subtype="C" rcssubtype="">
<header>
<PI>35</PI>
</header>
<content>
<property id="81743">
<currValue>CA</currValue>
</property>
<property id="81745">
<currValue>Called</currValue>
</property>
<property id="81746">
<currValue>4004</currValue>
</property>
<property id="81748">
<currValue>Y</currValue>
</property>
<property id="81749">
<currValue>Y</currValue>
</property>
<property id="81750">
<currValue>10000101000000</currValue>
</property>
</content>
</entity>
</rdcData>
16 апр 12, 16:57    [12423616]     Ответить | Цитировать Сообщить модератору
 Re: ? по OPENXML  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
Гулин Федор,

добавить with

with (type varchar(100) '@type',
subtype varchar(100) '@subtype',
rcssubtype varchar(100) '@rcssubtype')
16 апр 12, 18:49    [12424060]     Ответить | Цитировать Сообщить модератору
 Re: ? по OPENXML  [new]
Гулин Федор
Member

Откуда: МИНСК
Сообщений: 1316
получилось достать данные (ошибка была - стоял go он обнулял xml переменную)

SELECT * FROM OPENXML (@idoc, '/rdcData/entity/content/property', 3)
WITH ( id int --'@id'
, currValue varchar(max) )
но не могу в этом же запросе достать данные для верхних уровней
через , t2 varchar(max) '../@type' --

, pi1 varchar(max) '/rdcData/entity/header/PI' -- здесь без @
, ent_type varchar(max) '/rdcData/entity/@type'

достают данные с 1-й записи entity из XML

а вот как долезть на 2 уровня выше во ветке '/rdcData/entity/content/property'
т.е на уровень entity и достать оттуда проперти
entity (<entity type="C1" subtype="s2" rcssubtype="rcs1"> )
- не могу сообразить
16 апр 12, 19:07    [12424109]     Ответить | Цитировать Сообщить модератору
 Re: ? по OPENXML  [new]
Гулин Федор
Member

Откуда: МИНСК
Сообщений: 1316
На 1 уровень вверх получается через ../
(от entities)

SELECT * FROM OPENXML (@idoc, '/rdcData/entity', 3)
WITH (
type varchar(max) -- '../@type' --
, ver1 varchar(max) '../@version' -- '../@type' --
, tar1 varchar(max) '../@target'
, subtype varchar(max)
, rcssubtype varchar(max)
16 апр 12, 19:30    [12424145]     Ответить | Цитировать Сообщить модератору
 Re: ? по OPENXML  [new]
iljy
Member

Откуда:
Сообщений: 8711
Гулин Федор,

ну, а на 2 уровня - через ../../
16 апр 12, 19:41    [12424160]     Ответить | Цитировать Сообщить модератору
 Re: ? по OPENXML  [new]
Гулин Федор
Member

Откуда: МИНСК
Сообщений: 1316
iljy,
да СПС за ответ так работает
( сам медотом тыка дошел)
а можно ли подняться на 2 уровня вверх ?
а потом в другую под-директорию на этом уровне

'/rdcData/entity/content/property'
подняться на entity а потом вниз но не на content а на header ?

(или это я уже слишкоа много хочу - и надо 2 запроса писать и джойинть резалтсеты
скорей всего так и сделаю)

<entity type="C1" subtype="s2" rcssubtype="rcs1">
<header>
<PI>35</PI>
</header>
<content>
<property id="81743">
<currValue>CA</currValue>
</property>
16 апр 12, 19:49    [12424176]     Ответить | Цитировать Сообщить модератору
 Re: ? по OPENXML  [new]
iljy
Member

Откуда:
Сообщений: 8711
Гулин Федор,

читайте про XPath
16 апр 12, 19:53    [12424184]     Ответить | Цитировать Сообщить модератору
 Re: ? по OPENXML  [new]
Гулин Федор
Member

Откуда: МИНСК
Сообщений: 1316
iljy
Гулин Федор,

читайте про XPath

а чуть подробней можно ?
я то полез читать - но както там много всего
16 апр 12, 20:12    [12424253]     Ответить | Цитировать Сообщить модератору
 Re: ? по OPENXML  [new]
Гулин Федор
Member

Откуда: МИНСК
Сообщений: 1316
зы добавлю что 2 запроса не пройедт - так как набор ключей в entity абсолютно не уникальный
т.е надо или одним запросом или еще какой-то новый ключ (+1) генерить (не уверен что это можно)

что меня смущает в хелпе Sample Annotated XSD Schema for XPath Examples (SQLXML 4.0)

Create a test application that uses SQLXML extensions for ADO to execute queries. For more information, see Using ADO to Execute SQLXML 4.0 Queries.
т.е получается надо чтобы ADO провайдер был установелен ?
или это просто примеры ?

ps я так в принципе понимаю что это не совсем дело скл-сервера xml парсить
но структура вроде как не слишком сложная - думаю что и решение (воркараунд) не слишком сложное должно быть
16 апр 12, 20:28    [12424309]     Ответить | Цитировать Сообщить модератору
 Re: ? по OPENXML  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 6201
Гулин Федор
а чуть подробней можно ?

Пути доступа
Примеры XPath
Ну и, в общем, Справочник по XPath.
Гулин Федор
я то полез читать - но както там много всего

Много, да. И некуда от этого не деться. Способа сократить количество информации по данному вопросу нет.
17 апр 12, 03:10    [12425002]     Ответить | Цитировать Сообщить модератору
 Re: ? по OPENXML  [new]
Гулин Федор
Member

Откуда: МИНСК
Сообщений: 1316
Я посмотрел - там все примеры Xpath
мне бы связку c скл-сервером
Xml+SELECT * FROM OPENXML
чтобы так сказать по образу и подобию
что-то типа примеров в БОЛ но чуть посложней

зы да вообщем наверно скл-сервер не самый подходящий тул для этого
17 апр 12, 14:57    [12427835]     Ответить | Цитировать Сообщить модератору
 Re: ? по OPENXML  [new]
iljy
Member

Откуда:
Сообщений: 8711
Гулин Федор
Я посмотрел - там все примеры Xpath
мне бы связку c скл-сервером
Xml+SELECT * FROM OPENXML
чтобы так сказать по образу и подобию
что-то типа примеров в БОЛ но чуть посложней

Ну так откройте BOL, там в связке.


Гулин Федор
зы да вообщем наверно скл-сервер не самый подходящий тул для этого

Золотые слова!
17 апр 12, 15:07    [12427909]     Ответить | Цитировать Сообщить модератору
 Re: ? по OPENXML  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 6201
Гулин Федор
Я посмотрел - там все примеры Xpath
мне бы связку c скл-сервером
Xml+SELECT * FROM OPENXML
чтобы так сказать по образу и подобию

XPath-синтаксис в MSSQL стандартный. Т.е. примеры, приведенные там, если возвращают nodeset, то будут работать и в openxml, и в xpath queries.
17 апр 12, 19:18    [12429569]     Ответить | Цитировать Сообщить модератору
 Re: ? по OPENXML  [new]
Гулин Федор
Member

Откуда: МИНСК
Сообщений: 1316
методом проб и ошибок
получил то что мне надо
<PI>35</PI>
'../../*'

SELECT * -- into #t02
FROM OPENXML (@idoc, '/rdcData/entity/content/property', 3)
WITH (
id int --'@id'
, currValue varchar(max)
, pi_good varchar(max) '../../*' -- ! вышли на парент через ../ и взяли атрибут -
, ent_type varchar(max) '../../@type'
19 апр 12, 18:52    [12441706]     Ответить | Цитировать Сообщить модератору
 Re: ? по OPENXML  [new]
Гулин Федор
Member

Откуда: МИНСК
Сообщений: 1316
Попробовал скормить 43 мег XML SQL 2008 (на локальном сервере)
съел - подумав 1-2 мин

а чем чревато на боевых серверах ?
и кто какие реально объемы загонял с помощью openxml ?
(понятно что гиговые файлы вряд ли )
19 апр 12, 19:46    [12441957]     Ответить | Цитировать Сообщить модератору
 Re: ? по OPENXML  [new]
iljy
Member

Откуда:
Сообщений: 8711
Гулин Федор,

гораздо правильнее для загрузки данных использовать XmlBulkLoad
19 апр 12, 19:55    [12441989]     Ответить | Цитировать Сообщить модератору
 Re: ? по OPENXML  [new]
Гулин Федор
Member

Откуда: МИНСК
Сообщений: 1316
iljy,
https://www.sql.ru/forum/actualthread.aspx?tid=720892&pg=1&mid=8075805#8075805
- это ?

я попробовал (поменяв пути естенственно )
Msg 10019, Level 16, State 0, Line 0
sp_OACreate has not yet been called successfully for this command batch.
...
EXEC dbo.spXmlBulkLoad 'D:\sql\xml\g1.xml' , 'D:\sql\xml\g1.xsd' , 'aa'
получил 4 ошибки
Msg 50000, Level 18, State 1, Procedure spXMLBulkLoad, Line 54
Ошибка при выполнении метода "KeepIdentity" в "d:\XMLBulkError.xml": (null)


или имеется ввиду нужно писать отдельный скрипт на каком то языке ?
( так скорей всего и будет делаться - но пока хотелось бы временное решение
или сугубо на скл-сервере или с мин. привелечением других средств )
19 апр 12, 20:30    [12442120]     Ответить | Цитировать Сообщить модератору
 Re: ? по OPENXML  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Гулин Федор
8075805 - это ?

sp_OACreate has not yet been called successfully for this command batch.
Ошибка при выполнении метода "KeepIdentity" в "d:\XMLBulkError.xml": (null)
О FAQ мой моск.

1. А вы настроили (согласно первой строке, с 'Ole Automation Procedures')?
2. KeepIdentity вы добавили сами. И видимо немного не так как надо.
3. Мне кажется вы слабо понимаете что там делается.
19 апр 12, 23:06    [12442780]     Ответить | Цитировать Сообщить модератору
 Re: ? по OPENXML  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 6201
Mnior
FAQ мой моск.

Кстати, по поводу FAQ. Не засунуть ли вам этот ваш XmlBulkLoad в этот местный FAQ? Тема явно пользуется популярностью - за последнее время всплывает уже не в первый раз.
20 апр 12, 06:10    [12443294]     Ответить | Цитировать Сообщить модератору
 Re: ? по OPENXML  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Сон Веры Павловны, Да нужно, тока никак руки не доходят.
20 апр 12, 15:17    [12446400]     Ответить | Цитировать Сообщить модератору
 Re: ? по OPENXML  [new]
Гулин Федор
Member

Откуда: МИНСК
Сообщений: 1316
Mnior,

1 да
EXEC sp_configure 'Ole Automation Procedures', 1;
RECONFIGURE WITH OVERRIDE;

2 - да взял с др. версии - убрал
3 слабо - да увы так и есть (если бы сильно то с чего бы я писал сюда)

EXEC dbo.spXmlBulkLoad 'D:\sql\xml\g1.xml' , 'D:\sql\xml\g1.xsd'

Ошибка при выполнении метода "SQLXMLBulkLoad.SQLXMLBulkload" в "sp_OACreate": Ошибка создания OLE объекта

Версия СКЛ сервера 2008R2 ( Win7 x64):
Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64) Jun 17 2011 00:54:03 Copyright (c) Microsoft Corporation Developer Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)


http://msdn.microsoft.com/ru-ru/library/ms171744.aspx
Before SQL Server 2008, SQLXML 4.0 was released with SQL Server and was part of the default installation of all SQL Server versions except for SQL Server Express. Starting with SQL Server 2008, the latest version of SQLXML (SQLXML 4.0 SP1) is no longer included in SQL Server.

To install SQLXML 4.0 SP1, download it from Install Location for SQLXML 4.0 SP1.

т.е я понимаю что надо качать с
http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=8824
И устанавливать
но что-то я не нашел там sqlxml (искал по тексту) ?

ps в FAQ было бы гут (но имхо только с атачнутым xml,xsd)
20 апр 12, 16:16    [12446895]     Ответить | Цитировать Сообщить модератору
 Re: ? по OPENXML  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
Гулин Федор
To install SQLXML 4.0 SP1, download it from Install Location for SQLXML 4.0 SP1.

т.е я понимаю что надо качать с
http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=8824
И устанавливать но что-то я не нашел там sqlxml (искал по тексту) ?
Качаете HTML страницу, а там линки на компоненты:
Microsoft SQLXML 4.0 SP1
SQLXML enables XML support for your SQL Server Database. It allows developers to bridge the gap between XML and relational data. You can create XML View of your existing relational data and work with it as if it was an XML file. SQLXML allows you to:
  • Query relational database with XPath
  • Update relational data as if it was XML
  • Load XML into SQL Server
  • Query SQL Server OLEDB/ADO or .NET Framework Managed Classes
    Microsoft SQLXML 4.0 SP1 provides support for new SQL Server 2008 data types such as Date, Time, DateTime2 and DateTimeOffset.

    Audience(s): Customer, Partner, Developer

    X86 Package(sqlxml.msi) - 7234 KB
    X64 Package (sqlxml.msi) - 12584 KB
    IA64 Package(sqlxml.msi) - 17143 KB
  • 20 апр 12, 17:40    [12447651]     Ответить | Цитировать Сообщить модератору
    Все форумы / Microsoft SQL Server Ответить