Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 在TSQL中合并和修改XML_Sql Server_Xml_Tsql_Sql Server 2005 - Fatal编程技术网

Sql server 在TSQL中合并和修改XML

Sql server 在TSQL中合并和修改XML,sql-server,xml,tsql,sql-server-2005,Sql Server,Xml,Tsql,Sql Server 2005,使用SQLServer2005,是否可以同时组合XML和添加属性 不幸的是,由于项目限制,我需要一个SQLServer2005解决方案 考虑以下内容,我需要在新元素中组合来自多行的XML ; WITH [TestTable] AS ( SELECT 7 AS [PkId], CAST('<data><id>11</id><id>12</id></data>' AS XML) AS [Data] UNION A

使用SQLServer2005,是否可以同时组合XML和添加属性

不幸的是,由于项目限制,我需要一个SQLServer2005解决方案

考虑以下内容,我需要在新元素中组合来自多行的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')
)
我的直觉是,如果不使用光标,这将是不可能的,但如果有人知道一种方法,我很乐意听到

应@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>'

日期将使用126日期格式进行格式化,该格式可从

获得。以下是您的快速答案。XML确实支持modify,但在这样的小数据集上分解也非常有效

代码

还有XML


XML在SQL Server中完全符合CRUD。今天我会在空闲时间做一个例子,除非别人先做。看看这是否对你有帮助:谢谢你的回答,马特。。。pkid是一个简单的例子,但实际上并不是我所需要的。将作为属性添加的实际数据将来自表中的datetime列。。。因此,我不确定这种方法是否适用于我的具体案例。请看一下更新。我将当前的时间戳放在@PKid列的源代码中,以显示datetime。在该步骤中要做的是连接到源数据,并从源表中提取所需的列。我认为当前的_TIMESTAMP与2005兼容,但是GET_DATE也可以。走近Matt-我真的很感谢您的努力,但是属性的值取自表中的一列,该列也包含XML字段。因此,我需要为行中的XML提供一个pkid属性,其中该属性的值是同一行的datetime值。请添加一个希望从中获取datetime列的表示例。还请包括与id字段相关的值。我可以举出一个简单的例子,但我更愿意准确地说出你们的要求。请参阅更新的问题-我希望这能让它更清楚,我为任何混淆道歉。我试图通过说明pkid字段使问题变得更简单,目的是在它工作后更改为submitteddate字段
<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>
[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>'
<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>
--The existing XML
DECLARE @XML XML = '<root>
  <data><id>11</id></data>
  <data><id>22</id></data>
  <data><id>33</id></data>
</root>'

--XML Shredded Back to a table
;WITH
ShreddedXML AS (
    SELECT
        ID = FieldAlias.value('(id)[1]','int')
    FROM
        @XML.nodes('/root/data') AS TableAlias(FieldAlias)
), ArbitraryPKGenerator AS (
    SELECT  CURRENT_TIMESTAMP AS PKid,
            ID
    FROM    ShreddedXML
)
SELECT  A.PKId AS "@PKid",
        A.ID AS "id"
FROM    ArbitraryPKGenerator AS A
FOR     XML PATH('data'), ROOT('root')
<root>
  <data PKid="2015-03-24T09:44:55.770">
    <id>11</id>
  </data>
  <data PKid="2015-03-24T09:44:55.770">
    <id>22</id>
  </data>
  <data PKid="2015-03-24T09:44:55.770">
    <id>33</id>
  </data>
</root>