Преобразование XML в таблицу SQL Server 2005

Все UA игнорируют атрибут версии, поэтому вы всегда можете отказаться от этого.

Если вы встраиваете свой SVG встроенный в HTML-страницу и обслуживаете эту страницу как text/html, то атрибуты xmlns не являются требуется . Внедрение SVG inline в HTML-документах - это довольно недавняя инновация, которая появилась как часть HTML5.

Если, тем не менее, вы обслуживаете свою страницу как image / svg + xml или application / xhtml + xml или любой другой тип MIME, заставляет пользовательский агент использовать парсер XML, тогда требуются атрибуты xmlns . Это был единственный способ сделать что-то до недавнего времени, поэтому там было много контента.

2
задан Shnugo 13 July 2018 в 17:07
поделиться

1 ответ

У меня нет активного SQL-Server 2005 для проверки этого (мальчик, это 2018 ... !!!), но я думаю, что этот запрос будет работать и в таких древних версиях:

DECLARE @xml XML=
N'<t1>
    <t2>
    <val>Opel</val>
    <t3>Merriva</t3>
    <t3>Zafira</t3>
    </t2>
    <t2>
    <val>Fiat</val>
    <t3>Albea</t3>
    </t2>
</t1>';

--The CTE will return the CarName with a running index together with the related data as XML-node
WITH Cars AS
(
    SELECT ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) AS t2_index
        ,t2.value(N'(val/text())[1]',N'nvarchar(100)') AS t2_val
        ,t2.query(N't3') AS t3_nodes
    FROM @xml.nodes(N'/t1/t2') A(t2)
)
--This part will append all related data with a running number for the related type data
SELECT Cars.* 
    ,ROW_NUMBER() OVER(ORDER BY(SELECT NULL)) AS CarValueIndex
    ,t3.value(N'text()[1]',N'nvarchar(100)') AS CarValue
INTO #tmpCars --write the result into a temp table
FROM Cars
OUTER APPLY t3_nodes.nodes(N't3') A(t3);

--All data de-normalized
SELECT * FROM #tmpCars;

--This query will bring back the parent rows
SELECT t2_index AS CarID
      ,t2_val AS CarName
FROM #tmpCars
GROUP BY t2_index,t2_val;

--And this query will return the related child data
SELECT CarValueIndex AS CarTypeID
      ,t2_index AS fk_CarID
      ,CarValue AS CarType
FROM #tmpCars;

GO
DROP TABLE #tmpCars;

Если есть шанс перейти на более современный SQL-сервер, вы действительно должны это сделать ...

UPDATE

Согласно эта ссылка , функция .value() и .nodes() была введена с v2008. Но у меня темная память, что она уже работала в 2005 году, может быть вместе с некоторыми пакетами обновлений ... Попробуйте.

0
ответ дан Shnugo 17 August 2018 в 12:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: