【发布时间】:2023-03-02 22:38:01
【问题描述】:
使用SQL Server 2005,是否可以同时合并XML和添加属性?
很遗憾,由于项目限制,我需要一个 SQL Server 2005 解决方案。
考虑以下情况,我需要在一个新的<root> 元素中组合来自多行的 XML...
; WITH [TestTable] AS (
SELECT 7 AS [PkId], CAST('<data><id>11</id><id>12</id></data>' AS XML) AS [Data]
UNION ALL
SELECT 12, CAST('<data><id>22</id></data>' AS XML)
UNION ALL
SELECT 43, CAST('<data><id>33</id></data>' AS XML)
)
SELECT (
SELECT XMLDATA as [*]
FROM (
SELECT [Data] AS [*]
FROM [TestTable]
FOR XML PATH(''), TYPE
) AS DATA(XMLDATA)
FOR XML PATH('root')
)
这会产生...的所需输出
<root>
<data><id>11</id><id>12</id></data>
<data><id>22</id></data>
<data><id>33</id></data>
</root>
但如果可能的话,我需要做的是向每一行中的 existing 数据元素添加一个属性,该属性具有 PkId 值。所需的输出将如下所示...
<root>
<data pkid="7"><id>11</id><id>12</id></data>
<data pkid="12"><id>22</id></data>
<data pkid="43"><id>33</id></data>
</root>
我的直觉是,如果不使用光标,这将是不可能的,但如果有人知道这样做的方法,我很想听听。
应@MattA的要求,这里是表格中一些随机数据的例子……
[PkId] [UserId] [SubmittedDate] [Data]
1 1 2015-03-24 12:34:56 '<data><id>1</id><id>2</id></data>'
2 1 2015-03-23 09:15:52 '<data><id>3</id></data>'
3 2 2015-03-22 16:01:23 '<data><id>4</id><id>5</id></data>'
4 1 2015-03-21 13:45:34 '<data><id>6</id></data>'
请注意,为了使问题更容易,我声明我需要 PkId 列作为数据的属性。实际上并非如此 - 相反,我需要使用 [SubmittedDate] 列。如果这造成了混乱,我深表歉意。
使用UserId=1 作为过滤器,我想从上面得到的 XML 将是...
<root>
<data submitteddate="2015-03-24T12:34:56"><id>1</id><id>2</id></data>
<data submitteddate="2015-03-23T09:15:52"><id>3</id></data>
<data submitteddate="2015-03-21T13:45:34"><id>6</id></data>
</root>
日期将使用CONVERT 提供的 126 日期格式进行格式化
【问题讨论】:
-
XML 在 SQL Server 中完全符合 CRUD。今天我会在空闲时间做一个例子,除非有人先做。
-
看看这对你有没有帮助:stackoverflow.com/questions/13234175/…
标签: sql-server xml tsql sql-server-2005