SQL Server 在 XML 字段中选择

1 xml sql-server sql-server-2012 sql-server-2014

我需要以下情况的帮助:

在我的表 SQLServer 2012 中有一个带有 xml 值的字段,我想选择该字段中的数据并在表单列中显示结果。

图片1

<row> 
  <ID_Cota>162986</ID_Cota>
  <ID_Taxa_Plano>1000</ID_Taxa_Plano>
  <ID_Plano_Venda>1020</ID_Plano_Venda>
  <ID_Pessoa>18522</ID_Pessoa>
</row>
Run Code Online (Sandbox Code Playgroud)

谢谢你。

wBo*_*Bob 7

使用XML 数据类型CROSS APPLY.nodes方法,例如:

IF OBJECT_ID('dbo.yourTable') IS NOT NULL DROP TABLE dbo.yourTable
GO
CREATE TABLE dbo.yourTable ( 
    rowId INT IDENTITY PRIMARY KEY, 
    ST_Registro_Del XML
)
GO

INSERT INTO dbo.yourTable ( ST_Registro_Del )
SELECT '<row> 
  <ID_Cota>162986</ID_Cota>
  <ID_Taxa_Plano>1000</ID_Taxa_Plano>
  <ID_Plano_Venda>1020</ID_Plano_Venda>
  <ID_Pessoa>18522</ID_Pessoa>
</row>'
GO


SELECT 
    r.c.value('(ID_Cota/text())[1]', 'INT' ) AS ID_Cota,
    r.c.value('(ID_Taxa_Plano/text())[1]', 'INT' ) AS ID_Cota,
    r.c.value('(ID_Plano_Venda/text())[1]', 'INT' ) AS ID_Cota,
    r.c.value('(ID_Pessoa/text())[1]', 'INT' ) AS ID_Cota
FROM dbo.yourTable yt
    CROSS APPLY yt.ST_Registro_Del.nodes('row') r(c)
WHERE rowId = 1
Run Code Online (Sandbox Code Playgroud)

这是我的结果:

检测结果

.nodes方法从 XML 返回结果集。text()在查询非类型化 XML 时使用访问器来提高性能(即没有 XSD 与 XML 列和[1]序数关联,这是说“给我你找到的第一个元素”的简写方式。

HTH