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



我想从这个xml中获取一个节点'RID':

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

我在SQL Server 2012中使用以下查询:

DECLARE @data xml  
DECLARE @RID varchar(256) 
select @data = CAST(CAST(Data AS text) AS XML) from message where index=1
select @data
SET @RID =  @data.value('(/ReplicationStatus/RID)[1]', 'varchar(256)' )  
SELECT @RID 

在这里,数据是文本。我把它从ntext投射到文本,然后投射到xml。现在,我正在以xml格式获得@data。但返回的 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)

结果:

RID                                   PIN
5ec827e9-0429-4f5a-9d4b-16d3503ff07b  5678

注意:重要!ntext、text 和 image 数据类型将在将来版本的 SQL Server 中删除。避免在新的开发工作中使用这些数据类型,并计划修改当前使用这些数据类型的应用程序。请改用 nvarchar(max(、varchar(max( 和 varbinary(max(。

阅读 https://learn.microsoft.com/en-us/sql/t-sql/data-types/ntext-text-and-image-transact-sql

最新更新