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

Откуда: Новосибирск
Сообщений: 659
Как каждую строку исходной таблицы преобразовать в свой xml
Наверное, кодом будет понятнее
DECLARE  @src TABLE(
    [n]     VARCHAR(10)
  , [cnt]   INT
);
DECLARE  @dst TABLE(
    [col] XML
);

INSERT INTO @src([n], [cnt])
VALUES  ('Яблоко', 40)
      , ('Апельсин', 23)
      , ('Груша', 75)
      , ('Арбуз', 3)

INSERT INTO @dst([col])
SELECT ....
    FROM @src

SELECT *
    FROM @dst

В резулитате должно получиться
col
<fruit><name>Яблоко</name><count>40</count></fruit>
<fruit><name>Апельсин</name><count>23</count></fruit>
<fruit><name>Груша</name><count>75</count></fruit>
<fruit><name>Арбуз</name><count>3</count></fruit>

В реальности xml будет развеситым, колонок много. Мне бы сам принцип понять. Не по буквам же его собирать...
18 сен 15, 14:27    [18165809]     Ответить | Цитировать Сообщить модератору
 Re: Одна строка таблицы - один XML  [new]
Konst_One
Member

Откуда:
Сообщений: 11623
читайте про:
FOR XML
PATH
ROOT
18 сен 15, 14:33    [18165878]     Ответить | Цитировать Сообщить модератору
 Re: Одна строка таблицы - один XML  [new]
Guf
Member

Откуда: Новосибирск
Сообщений: 659
Konst_One,

Читал и пользовался не однакратно.
Все это собирает _все_ строки таблицы в _один_ большой xml
А мне нужно одну строку в отдельный xml
18 сен 15, 14:43    [18165977]     Ответить | Цитировать Сообщить модератору
 Re: Одна строка таблицы - один XML  [new]
Konst_One
Member

Откуда:
Сообщений: 11623
nodes.
18 сен 15, 14:45    [18165988]     Ответить | Цитировать Сообщить модератору
 Re: Одна строка таблицы - один XML  [new]
Konst_One
Member

Откуда:
Сообщений: 11623
Xml.nodes() вернуть XML построчно на клиента, результирующим запросом
18 сен 15, 14:46    [18165994]     Ответить | Цитировать Сообщить модератору
 Re: Одна строка таблицы - один XML  [new]
VAlexey
Member

Откуда:
Сообщений: 130
INSERT INTO @dst([col])
SELECT (select n 'name', cnt 'count' for xml path('fruit'), type)
FROM @src
18 сен 15, 14:49    [18166009]     Ответить | Цитировать Сообщить модератору
 Re: Одна строка таблицы - один XML  [new]
Konst_One
Member

Откуда:
Сообщений: 11623
VAlexey
INSERT INTO @dst([col])
SELECT (select n 'name', cnt 'count' for xml path('fruit'), type)
FROM @src


+1
отличное решение и простое
18 сен 15, 14:52    [18166028]     Ответить | Цитировать Сообщить модератору
 Re: Одна строка таблицы - один XML  [new]
Guf
Member

Откуда: Новосибирск
Сообщений: 659
Konst_One, VAlexey,
Спасибо!
Пока ваял код ниже дали еще вариант.
DECLARE  @xml XML
SELECT @xml = (
    SELECT  [s].[n]     AS 'name'
          , [s].[cnt]   AS 'count'
        FROM @src [s]
        FOR XML PATH('fruit'), ROOT('root')
)
SELECT [col].query('.') AS [col]
    FROM @xml.nodes('root/fruit')[t]([col])
;
18 сен 15, 14:59    [18166080]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить