在SQL中连接多个xml columntype行

时间:2010-07-20 02:28:24

标签: sql tsql

我有一个在线表单,每个条目都将数据作为xml添加到SQL中的xml列。

ApplicationID(uniqueidentifier) | DateModified | ApplicationForm(XML)

我需要做的是执行一个select查询,它将获取所有ApplicationForm xml值,并将它们连接在一起形成一个结果,例如

Row1: <ApplicationForm type=""></ApplicationForm>
Row2: <ApplicationForm type=""></ApplicationForm>

选择结果:

<Applications>
   <ApplicationForm type=""></ApplicationForm>
   <ApplicationForm type=""></ApplicationForm>
</Applications>

3 个答案:

答案 0 :(得分:0)

查看this page,其中列出了多种连接数据行的方法。

答案 1 :(得分:0)

可能是比这更好的方法,但是我将ApplicationForm标记指定为要删除的标记,然后将其删除。

DECLARE @a TABLE (ID UNIQUEIDENTIFIER,
                    DateModified DATETIME,
                    ApplicationForm XML)

INSERT INTO @a
        ( ID, DateModified, ApplicationForm )
VALUES  ( NEWID(), -- ID - uniqueidentifier
          '2010-12-07 18:47:36', -- DateModified - datetime
          '<Application><Form>123</Form></Application>'
          ) ,
         ( NEWID(), -- ID - uniqueidentifier
          '2010-12-07 18:47:36', -- DateModified - datetime
          '<Application><Form>456</Form></Application>'
          )             

DECLARE @Result VARCHAR(MAX)
SET @Result = CONVERT(VARCHAR(MAX), ( SELECT ApplicationForm AS "StripTagOut" 
FROM @a 
FOR XML PATH(''), ROOT('Applications'), TYPE   ))

SELECT CONVERT(xml, REPLACE(REPLACE(@Result, '</StripTagOut>', ''), '<StripTagOut>', ''))

答案 2 :(得分:0)

这是一个使用XML EXPLICIT的实验,我相信它有效:

SELECT 1 AS Tag,
       NULL AS Parent,
       NULL [Applications!1],
       NULL [ApplicationForm!2!!XMLTEXT]
UNION ALL
SELECT 2 AS Tag,
       1 AS Parent,
       NULL [Applications!1],
       ApplicationForm [ApplicationForm!2!!XMLTEXT]      
FROM YourTable
FOR XML EXPLICIT

为了我自己的满足,这是我使用的示例脚本

CREATE TABLE XmlTest
(
   ApplicationForm xml
)

INSERT INTO XmlTest VALUES ('<ApplicationForm type="a"><SomeTag>SomeContent</SomeTag></ApplicationForm>')
INSERT INTO XmlTest VALUES ('<ApplicationForm type="b"><SomeTag>SomeOtherContent</SomeTag></ApplicationForm>')

SELECT 1 AS Tag,
       NULL AS Parent,
       NULL [Applications!1],
       NULL [ApplicationForm!2!!XMLTEXT]
UNION ALL
SELECT 2 AS Tag,
       1 AS Parent,
       NULL [Applications!1],
       ApplicationForm [ApplicationForm!2!!XMLTEXT]      
FROM XmlTest       
FOR XML EXPLICIT

哪个输出

<Applications>
  <ApplicationForm type="a">
    <SomeTag>SomeContent</SomeTag>
  </ApplicationForm>
  <ApplicationForm type="b">
    <SomeTag>SomeOtherContent</SomeTag>
  </ApplicationForm>
</Applications>