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

Откуда:
Сообщений: 812
Здравствуйте, возникла потребность экспортировать данные из XML в SQL. Как это проще всего сделать?
Сейчас XML сохраняю в XLS, а затем XLS в DBF перевожу. Из DBF уже через openqery копирую в SQL базу.
22 июл 11, 13:00    [11012080]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт из XML в SQL  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
https://www.sql.ru/forum/actualtopics.aspx?search=xml&submit=%CD%E0%E9%F2%E8&bid=1
22 июл 11, 13:01    [11012086]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт из XML в SQL  [new]
НадеждаМ
Member

Откуда:
Сообщений: 812
Гавриленко Сергей Алексеевич,

при выполнении запроса
SELECT *
FROM OPENROWSET(BULK 'C:\prise.xml', SINGLE_CLOB) AS Docum выходит ошибка:

Msg 4834, Level 16, State 1, Line 3
You do not have permission to use the bulk load statement.
22 июл 11, 13:23    [11012262]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт из XML в SQL  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Ну, прочитайте текст ошибки.
22 июл 11, 13:26    [11012289]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт из XML в SQL  [new]
НадеждаМ
Member

Откуда:
Сообщений: 812
Гавриленко Сергей Алексеевич,

Нет разрешения этот самый bulk использовать.

Прочитала я, а легче мне от этого не стало.
22 июл 11, 15:37    [11013445]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт из XML в SQL  [new]
q
Guest
НадеждаМ
Гавриленко Сергей Алексеевич,

Нет разрешения этот самый bulk использовать.

Прочитала я, а легче мне от этого не стало.

вам к админу сервера нужно за "облегчением" обратится
22 июл 11, 15:57    [11013593]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт из XML в SQL  [new]
Raoul
Member

Откуда:
Сообщений: 177
Логин должен иметь права bulkadmin на сервере, иначе, увы, никак.

Пусть админ даст тебе эти права или же настроит job, который будет регулярно перегонять XML в буферную таблицу, откуда ты уже сможешь их читать.
22 июл 11, 15:59    [11013608]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт из XML в SQL  [new]
НадеждаМ
Member

Откуда:
Сообщений: 812
Пробую сделать тестовый примерчик, просто выбрать данные из xml:

declare @idoc int, @x xml
set @x=N'<?xml version="1.0" encoding="utf-16"?>
<table>
<row><cell><data>1 </data></cell>
<cell><data>2</data></cell></row>

<row><cell><data>3 </data></cell>
<cell><data>4</data></cell></row>

<row><cell><data>5 </data></cell>
<cell><data>6</data></cell></row>
</table>'


select n.value('.','varchar(50)') Name
from @x.nodes('/table/*') t(n)

выводится

name
1 2
3 4
5 6

как сделать чтобы было к примеру

name1 name2
1 2
3 4
5 6
26 июл 11, 15:12    [11028770]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт из XML в SQL  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
НадеждаМ,

declare @idoc int, @x xml 
SET @x = N'<?xml version="1.0" encoding="utf-16"?>
<table>
<row><cell><data>1 </data></cell>
<cell><data>2</data></cell></row>

<row><cell><data>3 </data></cell>
<cell><data>4</data></cell></row>

<row><cell><data>5 </data></cell>
<cell><data>6</data></cell></row>
</table>'


select n.value('cell[1]','varchar(50)') Name, n.value('cell[2]','varchar(50)') Name2
from @x.nodes('/table/*') t(n)
?
26 июл 11, 15:23    [11028877]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт из XML в SQL  [new]
НадеждаМ
Member

Откуда:
Сообщений: 812
kDnZP,

Да, спасибо. А если у меня столбцов больще чем 2 будет, неизвестно сколько?
26 июл 11, 16:12    [11029292]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт из XML в SQL  [new]
НадеждаМ
Member

Откуда:
Сообщений: 812
Мне все стобцы вот таким образом перечислять?
26 июл 11, 16:50    [11029601]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт из XML в SQL  [new]
Raoul
Member

Откуда:
Сообщений: 177
НадеждаМ
А если у меня столбцов больще чем 2 будет, неизвестно сколько?

Тогда, вероятно, проще будет сделать так:
declare @x xml, @cols int;
set @x=N'<?xml version="1.0" encoding="utf-16"?>
<table>
<row><cell><data>1 </data></cell>
<cell><data>2</data></cell></row>

<row><cell><data>3 </data></cell>
<cell><data>4</data></cell></row>

<row><cell><data>5 </data></cell>
<cell><data>6</data></cell></row>
</table>'

create table #name (
	id int identity(1,1),
	val int,
	row int,
	col int
);

insert #name (val)
	select n.value('.','varchar(50)') val
	from @x.nodes('/table/row/*') t(n);

select @cols=@@ROWCOUNT/COUNT(*) from  @x.nodes('/table/row') t(n);

update #name set
	row = (id-1) / @cols + 1,
	col = (id-1) % @cols + 1;

select * from #name;

-- тут работаем с таблицей #name,
-- при необходимости можем PIVOT
-- организовать динамическим запросом

drop table #name;
26 июл 11, 17:09    [11029771]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт из XML в SQL  [new]
НадеждаМ
Member

Откуда:
Сообщений: 812
Raoul,

Я так понимаю, что pivot это транспанирование таблицы или результата запроса?

у меня получился результат:
id---val---row---col
1 1 1 1
2 2 1 2
3 3 2 1
4 4 2 2
5 5 3 1
6 6 3 2

Как его привести к виду:

col 1 2

row1 1 2
row2 3 4
row3 5 6
27 июл 11, 10:45    [11032402]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт из XML в SQL  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31984
НадеждаМ
Как его привести к виду:

col 1 2

row1 1 2
row2 3 4
row3 5 6
Динамический SQL и PIVOT
27 июл 11, 11:34    [11032755]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт из XML в SQL  [new]
НадеждаМ
Member

Откуда:
Сообщений: 812
alexeyvg,

с pivot разбираюсь
27 июл 11, 16:07    [11035048]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт из XML в SQL  [new]
НадеждаМ
Member

Откуда:
Сообщений: 812
Не подкинете какой-нибудь примерчик с pivot?
28 июл 11, 13:43    [11039458]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт из XML в SQL  [new]
Glory
Member

Откуда:
Сообщений: 104751
НадеждаМ
Не подкинете какой-нибудь примерчик с pivot?

BOL - Using PIVOT and UNPIVOT
28 июл 11, 13:43    [11039463]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт из XML в SQL  [new]
НадеждаМ
Member

Откуда:
Сообщений: 812
Как говортся читаю справку и вижу фигу.
28 июл 11, 14:19    [11039656]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт из XML в SQL  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31984
НадеждаМ
Как говортся читаю справку и вижу фигу.
А что в первом примере (Базовый пример PIVOT) непонятно?
28 июл 11, 14:35    [11039751]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт из XML в SQL  [new]
НадеждаМ
Member

Откуда:
Сообщений: 812
на основе базового примера получила результат

col1 col2 col3 col4 col5 col6 col7
row1 1 2 3 4 5 6

Столбец val перевернулся в одну строку. А как разбить на несколько строк?

col1 col2 col3
row1 1 2
row2 3 4
row3 5 6
28 июл 11, 15:33    [11040162]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт из XML в SQL  [new]
Glory
Member

Откуда:
Сообщений: 104751
НадеждаМ
на основе базового примера получила результат

col1 col2 col3 col4 col5 col6 col7
row1 1 2 3 4 5 6


И вы можете приветси этот ваш базовый пример ?
28 июл 11, 15:51    [11040326]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить