SQL Server 2008 R2 - 选择ntext作为XML

时间:2014-03-07 11:16:38

标签: sql sql-server xml tsql

如何将一大块XML从NTEXT列转换为2008R2上的类型化XML。

SELECT CAST(CONVERT(NVARCHAR(MAX), [Parameters]) AS XML) AS Parameters
FROM Subscriptions
WHERE DATALENGTH(Parameters) > 8000;

引发错误

Msg 9400, Level 16, State 1, Line 2
XML parsing: line 1, character 8000, unexpected end of input

典型的行看起来像这样(但更大,没有XML标头或编码信息)

<ParameterValues>
   <ParameterValue><Name>Subscription</Name><Value>1</Value></ParameterValue>
</ParameterValues>

我尝试过各种组合的临时表,CONVERT和CAST但没有成功。任何建议都非常赞赏。

@@ VERSION =“Microsoft SQL Server 2008 R2(SP2) - 10.50.4000.0(X64)2012年6月28日08:36:30版权所有(c)Windows NT 6.1上的Microsoft Corporation Enterprise Edition(64位)(Build 7601:Service Pack 1)(管理程序)“

2 个答案:

答案 0 :(得分:1)

您好我发现了两种方法,并在2012年进行了测试。它工作正常

Create table Subscriptions (Parameters VARCHAR(MAX) )     

DECLARE @Fill VARCHAR(MAX)     

SET @Fill = REPLICATE('A',10000)     

insert into Subscriptions      
select @Fill     

/***Option 1 :** */      
SELECT CAST('<r>'+ Parameters +'</r>' AS XML) from Subscriptions
    --(1 row(s) affected)

/***Option2:***/     

Declare @text NVarchar(max)     

Declare @x xml     

SELECT @text = Parameters      

FROM Subscriptions     

select @text     

Set @x =N'<root>
    <item>1</item><item>1</item><item>1</item><item>1</item><item>1</item><item>'+@text+N'</item><item>1</item><item>1</item><item>1</item><item>1</item>
</root>
'      

Select @x         

答案 1 :(得分:0)

你可以尝试一种方式,这也适用于ntext

SELECT  Parameters  from Subscriptions FOR XML RAW       

我刚验证,用户是正确的,它可能是坏的xml。做了更多测试并找到了

SELECT  Parameters  from Subscriptions FOR XML RAW  
/*retourns all rows in 1 xml*/   

SELECT CAST(CONVERT(NVARCHAR(MAX), [Parameters]) AS XML) AS Parameters

FROM订阅
    / 将每行返回为xml /

参考:SQL server tecnet refrence: http://technet.microsoft.com/en-us/library/bb522623.aspx