将ntext列转换为xml并获取节点';SQL中的s值

将ntext列转换为xml并获取节点';SQL中的s值,sql,xml,parsing,sql-server-2012,Sql,Xml,Parsing,Sql Server 2012,我想从此xml中获取节点“RID”: <ts:Status xmlns:ts="DistServices"> <RID> 5ec827e9-0429-4f5a-9d4b-16d3503ff07b </RID> <PIN> 5678 </PIN> </ts:Status> 这里,数据是ntext。我将它从ntext转换为text,然后转换为xml,共转换了两次。现在,我正在以xml格式获取@数据。但是返回的RID总是空的。有

我想从此xml中获取节点“RID”:

<ts:Status xmlns:ts="DistServices">
<RID>
5ec827e9-0429-4f5a-9d4b-16d3503ff07b
</RID>
<PIN>
5678
</PIN>
</ts:Status>

这里,数据是ntext。我将它从ntext转换为text,然后转换为xml,共转换了两次。现在,我正在以xml格式获取@数据。但是返回的RID总是空的。有人能帮我吗?

您可以在将
ntext
数据转换为
xml
后尝试:

DECLARE @DATA XML = '<ts:Status xmlns:ts="DistServices">
<RID>
5ec827e9-0429-4f5a-9d4b-16d3503ff07b
</RID>
<PIN>
5678
</PIN>
</ts:Status>'

SELECT 
       a.value('./RID[1]', 'NVARCHAR(MAX)') [RID],
       a.value('./PIN[1]', 'NVARCHAR(MAX)') [PIN]
       FROM @DATA.nodes ('*') as split(a)
注: 重要!在SQL Server的未来版本中,将删除ntext、text和image数据类型。避免在新的开发工作中使用这些数据类型,并计划修改当前使用它们的应用程序。改用nvarchar(max)、varchar(max)和varbinary(max)

阅读

DECLARE @DATA XML = '<ts:Status xmlns:ts="DistServices">
<RID>
5ec827e9-0429-4f5a-9d4b-16d3503ff07b
</RID>
<PIN>
5678
</PIN>
</ts:Status>'

SELECT 
       a.value('./RID[1]', 'NVARCHAR(MAX)') [RID],
       a.value('./PIN[1]', 'NVARCHAR(MAX)') [PIN]
       FROM @DATA.nodes ('*') as split(a)
RID                                   PIN
5ec827e9-0429-4f5a-9d4b-16d3503ff07b  5678