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

Откуда: London
Сообщений: 2712
как конвертировать последовательность (строки) данных одной колонны (1) в XML и (2) потом этот XML (value из нодов) в таблицу? например
@declare @tbl table(PowerShell nvarchar(255))
insert into @tbl exec xp_cmdshell 'some PowerShell code'
возвращает поледовательный output:
+ <catalog>
<book id="s15">

PowerShell
<catalog>
<book id="s15">
<title>
XML Programming Guide
</title>
<genre>
IT
</genre>
</book>
<book id="d24">
<title>
SQL Coding
</title>
<genre>
DataBases
</genre>
</book>
<book id="f07">
<title>
Visual Studio 2015
</title>
<genre>
Microsoft
</genre>
</book>
</catalog>
или
+ select PowerShell from (values
('<catalog>'),

select PowerShell from (values
('<catalog>'),
('<book id="s15">'),
('<title>'),
('XML Programming Guide'),
('</title>'),
('<genre>'),
('IT'),
('</genre>'),
('</book>'),
('<book id="d24">'),
('<title>'),
('SQL Coding'),
('</title>'),
('<genre>'),
('DataBases'),
('</genre>'),
('</book>'),
('<book id="f07">'),
('<title>'),
('Visual Studio 2015'),
('</title>'),
('<genre>'),
('Microsoft'),
('</genre>'),
('</book>'),
('</catalog>'))cmd(PowerShell)
соответственно хотелось-бы получить на выходе таблицу
idbookgenre
s15XML Programming GuideIT
d24SQL CodingDataBases
f07Visual Studio 2015Microsoft
7 ноя 16, 03:45    [19863909]     Ответить | Цитировать Сообщить модератору
 Re: как конвертировать последовательность (строки) данных (1) в XML и (2) потом в таблицу?  [new]
aleks2
Guest
Ты не поверишь, но скрипт Powershell способен загрузить текст в базу одним куском.

ЗЫ. Хотя, канешно, сляпать из таблички строку тоже можно.
7 ноя 16, 05:53    [19863927]     Ответить | Цитировать Сообщить модератору
 Re: как конвертировать последовательность (строки) данных (1) в XML и (2) потом в таблицу?  [new]
vikkiv
Member

Откуда: London
Сообщений: 2712
aleks2,

да уж в курсе - но не охота городить temp-ы да права учёток дёргать, поэтому желательно всё покомпактней в пределах сессии сделать и результат возвратить.
7 ноя 16, 10:29    [19864433]     Ответить | Цитировать Сообщить модератору
 Re: как конвертировать последовательность (строки) данных (1) в XML и (2) потом в таблицу?  [new]
invm
Member

Откуда: Москва
Сообщений: 9406
select
 t.n.value('@id', 'varchar(30)'),
 t.n.value('title[1]', 'varchar(100)'),
 t.n.value('genre[1]', 'varchar(100)')
from
 (
  select PowerShell as [*]
  from
   (values
    ('<catalog>'),
    ('<book id="s15">'),
    ('<title>'),
    ('XML Programming Guide'),
    ('</title>'),
    ('<genre>'),
    ('IT'),
    ('</genre>'),
    ('</book>'),
    ('<book id="d24">'),
    ('<title>'),
    ('SQL Coding'),
    ('</title>'),
    ('<genre>'),
    ('DataBases'),
    ('</genre>'),
    ('</book>'),
    ('<book id="f07">'),
    ('<title>'),
    ('Visual Studio 2015'),
    ('</title>'),
    ('<genre>'),
    ('Microsoft'),
    ('</genre>'),
    ('</book>'),
    ('</catalog>'))cmd(PowerShell) for xml path(''), type
 ) a(x) cross apply
 (select cast(a.x.value('.', 'varchar(max)') as xml)) b(x) cross apply
 b.x.nodes('/catalog/book') t(n);
7 ноя 16, 10:55    [19864644]     Ответить | Цитировать Сообщить модератору
 Re: как конвертировать последовательность (строки) данных (1) в XML и (2) потом в таблицу?  [new]
aleks2
Guest
vikkiv
aleks2,

да уж в курсе - но не охота городить temp-ы да права учёток дёргать, поэтому желательно всё покомпактней в пределах сессии сделать и результат возвратить.


Не, ты не в курсе.
7 ноя 16, 11:02    [19864693]     Ответить | Цитировать Сообщить модератору
 Re: как конвертировать последовательность (строки) данных (1) в XML и (2) потом в таблицу?  [new]
vikkiv
Member

Откуда: London
Сообщений: 2712
invm,

Спасибо огромущее - работает как нужно, а то я начал сначала в одну ячейку сливать а потом уже на ноды бить через
+ SELECT Stuff((SELECT' '+PowerShell from(values..
)cmd(PowerShell)FOR XML PATH(''),TYPE).value('text()...
SELECT Stuff((SELECT'  '+PowerShell from(values
('<catalog>'),
('<book id="s15">'),
('<title>'),
('XML Programming Guide'),
('</title>'),
('<genre>'),
('IT'),
('</genre>'),
('</book>'),
('<book id="d24">'),
('<title>'),
('SQL Coding'),
('</title>'),
('<genre>'),
('DataBases'),
('</genre>'),
('</book>'),
('<book id="f07">'),
('<title>'),
('Visual Studio 2015'),
('</title>'),
('<genre>'),
('Microsoft'),
('</genre>'),
('</book>'),
('</catalog>'))cmd(PowerShell)FOR XML PATH(''),TYPE).value('text()[1]','nvarchar(max)'),1,2,null)


aleks2,

ну может быть, именно по этому и спрашиваю
7 ноя 16, 13:37    [19865467]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить