我想知道如何将长XML值拆分和解析为一行。我已经在该网站上看到了一些用于通过'进行分割的选项,但由于我的字段中没有逗号,因此这对我不起作用。供参考,数据如下所示:
[XMLColumn]
<Student><Id>uniqueidentifier</Id><Name>Chris</Name><Grade>11</Grade></Student><Student><Id>uniqueidentifier</Id><Name>Joe</Name><Grade>4</Grade></Student><Student><Id>uniqueidentifier</Id><Name>Alex</Name><Grade>9</Grade></Student><Student><Id>uniqueidentifier</Id><Name>Mary</Name><Grade>2</Grade></Student>
我想对每个学生标签(<Student></Student>)
进行拆分,因此看起来可能像这样:
Id Name Grade
uniqueidentifier Chris 11
uniqueidentifier Joe 4
uniqueidentifier Alex 9
uniqueidentifier Mary 2
同样理想地,除非函数的复杂度低,否则我不希望使用它。我只是在对已经完成的现有学校项目进行实验,看看是否有方法可以使查询速度更快。
问题是,尽管我将永远知道学生(Id, Name, and Grade)
的属性,但是内部的数据将始终具有不同的长度,因此即使在特定索引处拆分也不一定有效。如果有人可以帮助,那就太好了。
答案 0 :(得分:0)
将数据转换为XML,并使用xQuery分解XML对象/文档。
Declare @XML XML = N'<Student>
<Id>uniqueidentifier</Id>
<Name>Chris</Name>
<Grade>11</Grade>
</Student>
<Student>
<Id>uniqueidentifier</Id>
<Name>Joe</Name>
<Grade>4</Grade>
</Student>
<Student>
<Id>uniqueidentifier</Id>
<Name>Alex</Name>
<Grade>9</Grade>
</Student>
<Student>
<Id>uniqueidentifier</Id>
<Name>Mary</Name>
<Grade>2</Grade>
</Student>'
SELECT
X.StockData.query('Id').value('.','VARCHAR(100)') AS [Id]
, X.StockData.query('Name').value('.','VARCHAR(100)') AS [Name]
, X.StockData.query('Grade').value('.','INT') AS [Grade]
FROM @XML.nodes('Student') AS X(StockData)
输出
╔══════════════════╦═══════╦═══════╗
║ Id ║ Name ║ Grade ║
╠══════════════════╬═══════╬═══════╣
║ uniqueidentifier ║ Chris ║ 11 ║
║ uniqueidentifier ║ Joe ║ 4 ║
║ uniqueidentifier ║ Alex ║ 9 ║
║ uniqueidentifier ║ Mary ║ 2 ║
╚══════════════════╩═══════╩═══════╝