如何将一大块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)(管理程序)“
答案 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