2015-03-26 1 views
1

У меня есть таблица в SQL Server 2012, которая содержит некоторые данные о клиентах. Один из столбцов в таблице содержит данные лицензии, которые хранятся как XML. Тип ячейки: nvarchar(MAX).Вернуть данные XML-ячеек в XML-запрос с SQL Server 2012

Можно ли использовать FOR XML (или какой-либо другой метод), чтобы при возврате данных XML из данных лицензии включался как XML, а не форматированная строка?

Если я просто использовать FOR XML RAW, то результат:

<Customers id="1" CustomerName="FirstCustomer" 
      LicenseData="&lt;license customerid=&quot;1&quot;&gt;...More data here...&lt;/license&gt;" /> 

Что бы я Liket, чтобы получить это:

<Customers id="1" CustomerName="FirstCustomer"> 
    <license customerid="1"> 
     ...More data here... 
    </license> 
</Customers> 

Есть ли способ, чтобы это произошло?

+0

[Плохие привычки пинать: неправильный выбор типа данных] (http://sqlblog.com/blogs/aaron_bertrand/ архив/2009/10/12/bad-habits-to-kick-use-the-wrong-data-type.aspx) - вы всегда должны использовать наиболее подходящий тип данных - вот для чего они все-таки нужны! Если ваши данные лицензии действительно всегда являются XML - ** хранят его как 'XML' **! –

+0

Спасибо. К сожалению, я не был дизайнером этой конкретной таблицы, я просто пытаюсь работать с ней. Я мог бы изменить тип данных в XML, но мне нужно пройти через какой-то другой код, чтобы убедиться, что я больше не нарушаю ничего другого. –

ответ

1

Если XML является допустимым фрагментом, вы можете просто указать CAST его в XML.

SELECT CAST(MyColumn as XML) as MyXml 
+0

Спасибо вам за ответ. Он делает именно то, что мне нужно. В этом случае я фактически принял ответ Райса Джонса, потому что мне не нужно создавать временную таблицу для получения результатов, просто запросов и приведения. –

1
declare @temp table (id int, customername nvarchar(128), data nvarchar(max)) 

insert into @temp 
select 1, 'FirstCustomer', '<license customerid="1"><element id="2">data1</element><element id="3"/></license>' 

select id, customername, cast(data as xml) 
from @temp 
for xml raw 

и вы получите результаты, как это:

<row id="1" customername="FirstCustomer"> 
    <license customerid="1"> 
    <element id="2">data1</element> 
    <element id="3" /> 
    </license> 
</row>