【问题标题】:Convert ntext column to xml and get a node's value in SQL将 ntext 列转换为 xml 并在 SQL 中获取节点的值
【发布时间】:2017-11-15 06:52:14
【问题描述】:

我想从此 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 始终为空。有人可以帮我解决这个问题吗?

【问题讨论】:

    标签: sql xml parsing sql-server-2012


    【解决方案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

    【讨论】:

      猜你喜欢
      • 2011-11-15
      • 2014-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-29
      相关资源
      最近更新 更多