Объединить несколько строк xum columntype в SQL - PullRequest
1 голос
/ 20 июля 2010

У меня есть онлайн-форма, в которой каждая запись добавляет данные в виде XML в столбец XML в SQL.

ApplicationID(uniqueidentifier) | DateModified | ApplicationForm(XML)

Что мне нужно сделать, это выполнить запрос на выборку, который соберет все значения xml ApplicationForm и объединит их вместе, чтобы сформировать один результат, например,

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

Выберите результат:

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

Ответы [ 3 ]

0 голосов
/ 07 декабря 2010

Возможно, лучший способ сделать это, чем этот, но я указал тег 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>', ''))
0 голосов
/ 07 декабря 2010

Это был эксперимент с использованием 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>
0 голосов
/ 20 июля 2010

Взгляните на эту страницу , на которой перечислено довольно много способов объединения строк данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...