2015-05-15 4 views
4

У меня есть таблица следующего содержанияSQL Server XML XQuery выбрать, где атрибут пункт

Id | Guid         | XmlDefinitionId 
1 | 5a0bfc84-13ec-4497-93e0-655e57d4b482 | 1 
2 | e28e786b-0856-40b6-8189-0fbd68aa3e45 | 1 

А в другой таблице следующая структура XML хранится:

<ActionActivity DisplayName="DisplayName 1" IsSkipped="False" Id="5a0bfc84-13ec-4497-93e0-655e57d4b482">...</ActionActivity> 
<p:Sequence DisplayName="Prerequisites"> 
    <ActionActivity DisplayName="Inner DisplayName 1" IsSkipped="False" Id="e28e786b-0856-40b6-8189-0fbd68aa3e45">...</ActionActivity> 
</p:Sequence> 
<ActionActivity DisplayName="DisplayName 2" IsSkipped="False" Id="dcc936dd-73c9-43cc-beb4-c636647d4851">...</ActionActivity> 

Таблица, содержащая XML имеют те нижеследующая структура:

Id | XML 
1 | (XML Structure defined above here) 

Основываясь на Руководстве, я хочу показать отображаемое имя. На данный момент у меня есть следующий запрос, который возвращает null в данный момент. Позже я хочу, чтобы каждый указатель из первой таблицы отображал отображаемое имя.

SELECT 
     Workflow 
     ,CAST(Workflow as XML).value('data(//ActionActivity[@Id="73c9-43cc-beb4-c636647d4851"])[1]', 'nvarchar(50)') as displayname 
    FROM SerializedData 

Любые идеи для отображения отображаемого имени с помощью SQL-запроса?

+1

Показать структуру таблицы, содержащей XML. Кроме того, образец xml, который вы опубликовали, не имеет атрибута «WorkflowActivityId» – har07

+0

@ har07 Спасибо за отзыв. Я обновил вопрос. – mrtentje

+0

Какой тип столбца XML во 2-й таблице? – har07

ответ

1

Предполагая, что XML хранится в XML напечатал колонке, вы можете сделать это путь -otherwise вам нужно CAST столбец XML -:

SELECT 
    g.guid, x.display_name 
FROM GuidTable g 
    INNER JOIN 
    (
     SELECT 
      t.id as 'xml_id' 
      , c.value('@Id', 'varchar(max)') as 'guid' 
      , c.value('@DisplayName', 'varchar(max)') as 'display_name' 
     FROM XmlTable t 
      CROSS APPLY t.xml.nodes('//ActionActivity') as aa(c) 
    ) x on x.guid = g.guid and x.xml_id = g.xmldefinitionid 

В основном, выше запрос кромсать XML в ActionActivity узле , А затем объединяет измельченные данные с GuidTable на guid и xmldefinitionid столбцах.

выход:

enter image description here

SQL Fiddle

Смежные вопросы