我想从这个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。我从ntext到text再到xml两次。现在,我以xml格式获取@data。但返回的RID始终为null。有人可以帮我这个吗?
答案 0 :(得分:1)
您可以在将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
注意: 重要强>!将来的SQL Server版本中将删除ntext,text和image数据类型。避免在新的开发工作中使用这些数据类型,并计划修改当前使用它们的应用程序。请改用nvarchar(max),varchar(max)和varbinary(max)。
阅读https://docs.microsoft.com/en-us/sql/t-sql/data-types/ntext-text-and-image-transact-sql