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

Откуда:
Сообщений: 29
Моя задача большой файл импортировать в таблицы SQL. С таким никогда не работал, поэтому опираясь на форум пробую.
Пока начал тренироваться с простого.
Есть файл xmlresult1.xml вот такого содержания и ее пробую импортировать. Таблицу для данных создал.
<issuance xmlns="http://www.w3schools.com" sender="700002794">
<general>
<number>700002794-2016-0000380328</number>
<dateIssuance>2016-06-01</dateIssuance>
<dateTransaction>2016-05-31</dateTransaction>
<documentType>ORIGINAL</documentType>
</general>
</issuance>


Вот, что написал
DECLARE
@xml XML
SELECT @xml = CONVERT(xml, BulkColumn, 2) FROM OPENROWSET(
BULK 'C:\xmlresult1.xml',
SINGLE_BLOB) AS x

INSERT INTO tabl (number, dateIssuance, dateTransaction, documentType)
SELECT
x.x.value('@number', 'varchar') AS number,
x.x.value('@dateIssuance', 'date') AS dateIssuance,
x.x.value('@dateTransaction', 'date') AS dateTransaction,
x.x.value('@documentType', 'varchar') AS documentType

FROM @xml.nodes('/general/number/dateIssuance/dateTransactiondocumentType') tabl(x)



Выдает
Сообщение 4860, уровень 16, состояние 1, строка 3
Массовая загрузка невозможна. Файл "C:\xmlresult1.xml" не существует.


Что не так?
2 июн 16, 11:03    [19248868]     Ответить | Цитировать Сообщить модератору
 Re: Что не так с импортом xml?  [new]
правильный проходящий.
Guest
Maxim696
Файл "C:\xmlresult1.xml" не существует.

Что не так?
Есть подозрение, что файл лежит на диске вашего компа, а вот сервер стоит на совершенно другом компе.
2 июн 16, 11:09    [19248906]     Ответить | Цитировать Сообщить модератору
 Re: Что не так с импортом xml?  [new]
Maxim696
Member

Откуда:
Сообщений: 29
правильный проходящий.,да, так и есть. Не подскажите как быть в данной ситуации?
2 июн 16, 11:13    [19248928]     Ответить | Цитировать Сообщить модератору
 Re: Что не так с импортом xml?  [new]
sposad
Member

Откуда:
Сообщений: 62187
Maxim696
правильный проходящий.,да, так и есть. Не подскажите как быть в данной ситуации?

Положить файл в то место, где сервер его увидит. Или на ту же машину, где запущен сервер или на шару, куда логин, из-под которого запущен сервер имеет право доступа
2 июн 16, 11:41    [19249088]     Ответить | Цитировать Сообщить модератору
 Re: Что не так с импортом xml?  [new]
Maxim696
Member

Откуда:
Сообщений: 29
sposad,спасибо, указал путь, уже не ругается, но и ничего не отображает.
Запрос переделал


SET @xml = (SELECT * FROM OPENROWSET(BULK 'c:\server\user\01\SDACHA\xmlresult1.xml', SINGLE_BLOB) AS fd)

EXEC sp_xml_preparedocument @hxml OUT,@xml
--все вендоры
SELECT *
FROM OPENXML(@hxml,'/general/number/dateIssuance/dateTransactiondocumentType',2)
WITH
(
[number] varchar (30) './general/number',
[dateIssuance] date './general/dateIssuance',
[dateTransaction] date './general/dateTransaction',
[documentType] varchar (50) './general/documentType'

)
2 июн 16, 12:36    [19249423]     Ответить | Цитировать Сообщить модератору
 Re: Что не так с импортом xml?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31964
Maxim696
ничего не отображает.

Так у вас нет такой ноды в файле: "/general", ну и соответственно, всех нижележащих
2 июн 16, 13:59    [19250081]     Ответить | Цитировать Сообщить модератору
 Re: Что не так с импортом xml?  [new]
Maxim696
Member

Откуда:
Сообщений: 29
Вроде и понимаю, но ....можно подробнее?alexeyvg,
2 июн 16, 14:52    [19250442]     Ответить | Цитировать Сообщить модератору
 Re: Что не так с импортом xml?  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
исправьте входной xml или вообще уберите xmlns:

Declare @xml xml = '<issuance xmlns:foo="http://www.w3schools.com" sender="700002794">
<general>
<number>700002794-2016-0000380328</number>
<dateIssuance>2016-06-01</dateIssuance>
<dateTransaction>2016-05-31</dateTransaction>
<documentType>ORIGINAL</documentType>
</general>
</issuance>'
Declare @hxml int

EXEC sp_xml_preparedocument @hxml OUT,@xml
--все вендоры
SELECT *
FROM OPENXML(@hxml,'//general',2)
WITH
(
[number] varchar (30) 'number',
[dateIssuance] datetime 'dateIssuance',
[dateTransaction] datetime 'dateTransaction',
[documentType] varchar (50) 'documentType'
)
2 июн 16, 15:07    [19250515]     Ответить | Цитировать Сообщить модератору
 Re: Что не так с импортом xml?  [new]
Maxim696
Member

Откуда:
Сообщений: 29
Konst_One, самое интересное это я такой документ с таким входным xmlns получаю((выгружаем с портала министерства по налогам.
2 июн 16, 15:49    [19250757]     Ответить | Цитировать Сообщить модератору
 Re: Что не так с импортом xml?  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
Maxim696
Konst_One, самое интересное это я такой документ с таким входным xmlns получаю((выгружаем с портала министерства по налогам.


и что? MS SQL имеет свои правила работы с типом данных xml
2 июн 16, 15:50    [19250766]     Ответить | Цитировать Сообщить модератору
 Re: Что не так с импортом xml?  [new]
Maxim696
Member

Откуда:
Сообщений: 29
Konst_One, т.е другого выхода как подправлять каждый файл у меня нет?
2 июн 16, 15:53    [19250788]     Ответить | Цитировать Сообщить модератору
 Re: Что не так с импортом xml?  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
Maxim696
Konst_One, т.е другого выхода как подправлять каждый файл у меня нет?


попробуйте сами поискать решения в документации или в интернете
2 июн 16, 15:55    [19250801]     Ответить | Цитировать Сообщить модератору
 Re: Что не так с импортом xml?  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
Declare @xml xml = '<issuance xmlns="http://www.w3schools.com" sender="700002794">
<general>
<number>700002794-2016-0000380328</number>
<dateIssuance>2016-06-01</dateIssuance>
<dateTransaction>2016-05-31</dateTransaction>
<documentType>ORIGINAL</documentType>
</general>
</issuance>'

;WITH XMLNAMESPACES ( 'http://www.w3schools.com' AS foo, DEFAULT 'http://www.w3schools.com' )
SELECT 
	x.c.value( 'number[1]', 'VARCHAR(30)')  AS [number],
	x.c.value( 'dateIssuance[1]', 'datetime') AS [dateIssuance],
	x.c.value( 'dateTransaction[1]', 'datetime') AS dateTransaction,
	x.c.value( 'documentType[1]', 'varchar(50)') AS documentType
FROM @xml.nodes('/*/general') x(c)
2 июн 16, 16:08    [19250874]     Ответить | Цитировать Сообщить модератору
 Re: Что не так с импортом xml?  [new]
daw
Member

Откуда: Муром -> Москва
Сообщений: 7381
файл можно и не трогать:

DECLARE @xml XML, @hxml INT,@FileName varchar(50)
set @FileName='C:\xmlresult1.xml'

SET @xml = ('<issuance xmlns="http://www.w3schools.com" sender="700002794">
<general>
<number>700002794-2016-0000380328</number>
<dateIssuance>2016-06-01</dateIssuance>
<dateTransaction>2016-05-31</dateTransaction>
<documentType>ORIGINAL</documentType>
</general>
</issuance>')

EXEC sp_xml_preparedocument @hxml OUT,@xml, '<root xmlns:ns="http://www.w3schools.com" />'
--все вендоры
SELECT *
FROM OPENXML(@hxml,'/ns:issuance/ns:general',2)
WITH
(
[number] varchar (30) './ns:number',
[dateIssuance] date './ns:dateIssuance',
[dateTransaction] date './ns:dateTransaction',
[documentType] varchar (50) './ns:documentType'

) 

exec sp_xml_removedocument @hxml;
2 июн 16, 16:09    [19250877]     Ответить | Цитировать Сообщить модератору
 Re: Что не так с импортом xml?  [new]
Maxim696
Member

Откуда:
Сообщений: 29
daw,огромное спасибо!
3 июн 16, 09:33    [19253036]     Ответить | Цитировать Сообщить модератору
 Re: Что не так с импортом xml?  [new]
Maxim696
Member

Откуда:
Сообщений: 29
daw, можно еще вопрос, а если у меня усложнилась структура
DECLARE @xml XML, @hxml INT,@FileName varchar(50)
set @FileName='C:\xmlresult1.xml'

SET @xml = ('<issuance xmlns="http://www.w3schools.com" sender="700002794">
<general>
	<number>700002794-2016-0000380328</number>
	<dateIssuance>2016-06-01</dateIssuance>
	<dateTransaction>2016-05-31</dateTransaction>
	<documentType>ORIGINAL</documentType>
</general>
<provider>
    <providerStatus>SELLER</providerStatus>
    <dependentPerson>false</dependentPerson>
    <residentsOfOffshore>false</residentsOfOffshore>
    <specialDealGoods>false</specialDealGoods>
 </provider>
 </issuance>')

EXEC sp_xml_preparedocument @hxml OUT,@xml, '<root xmlns:ns="http://www.w3schools.com" />'
--все вендоры
SELECT *
FROM OPENXML(@hxml,'/ns:issuance/ns:general',2)
WITH
(
[number] varchar (30) './ns:number',
[dateIssuance] date './ns:dateIssuance',
[dateTransaction] date './ns:dateTransaction',
[documentType] varchar (50) './ns:documentType'
) 
exec sp_xml_removedocument @hxml;
3 июн 16, 09:39    [19253059]     Ответить | Цитировать Сообщить модератору
 Re: Что не так с импортом xml?  [new]
Maxim696
Member

Откуда:
Сообщений: 29
daw,как прописать тег provider?
3 июн 16, 09:40    [19253065]     Ответить | Цитировать Сообщить модератору
 Re: Что не так с импортом xml?  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
DECLARE @x XML = N'
<issuance xmlns="http://www.w3schools.com" sender="700002794">
    <general>
        <number>700002794-2016-0000380328</number>
        <dateIssuance>2016-06-01</dateIssuance>
        <dateTransaction>2016-05-31</dateTransaction>
        <documentType>ORIGINAL</documentType>
    </general>
    <provider>
        <providerStatus>SELLER</providerStatus>
        <dependentPerson>false</dependentPerson>
        <residentsOfOffshore>false</residentsOfOffshore>
        <specialDealGoods>false</specialDealGoods>
     </provider>
 </issuance>'

SELECT
      t.c.value('(*:general/*:number/text())[1]', 'VARCHAR(100)')
    , t.c.value('(*:general/*:dateIssuance/text())[1]', 'DATE')
    , t.c.value('(*:general/*:dateTransaction/text())[1]', 'DATE')
    , t.c.value('(*:general/*:documentType/text())[1]', 'VARCHAR(100)')

    , t.c.value('(*:provider/*:providerStatus/text())[1]', 'VARCHAR(100)')
    , t.c.value('(*:provider/*:dependentPerson/text())[1]', 'BIT')
    , t.c.value('(*:provider/*:residentsOfOffshore/text())[1]', 'BIT')
    , t.c.value('(*:provider/*:specialDealGoods/text())[1]', 'BIT')
FROM @x.nodes('*:issuance') t(c)
3 июн 16, 10:50    [19253465]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить