Sql server SQL Server:包含XML数据的列
我想将XML数据中的值提取到列中 我试着用这个:Sql server SQL Server:包含XML数据的列,sql-server,xml,exact-synergy-enterprise,Sql Server,Xml,Exact Synergy Enterprise,我想将XML数据中的值提取到列中 我试着用这个: DECLARE @xml XML SELECT @xml = Data FROM synergy..XMLData SELECT xmlData.Col.value('(column/@value)[1]','varchar(255)') AS 'Artikelen', xmlData.Col.value('(column/@value)[2]','varchar(255)') AS 'Batchnummer', x
DECLARE @xml XML
SELECT @xml = Data FROM synergy..XMLData
SELECT
xmlData.Col.value('(column/@value)[1]','varchar(255)') AS 'Artikelen',
xmlData.Col.value('(column/@value)[2]','varchar(255)') AS 'Batchnummer',
xmlData.Col.value('(column/@value)[3]','varchar(255)') AS 'Aantal'
FROM
@XML.nodes ('//table/rows/row/columns') xmldata(Col)
然而,我只得到标题,但没有数据
这就是XML的外观:
<?xml version="1.0" encoding="utf-16"?>
<table>
<id>{941D5F5A-156A-4F19-A3B0-111E9825707B}</id>
<rows>
<row>
<columns>
<column name="Artikelen" value="102535.A.M2" type="System.String" />
<column name="Batchnummer" value="19D1739/133" type="System.String" />
<column name="Aantal" value="8" type="System.Int32" />
<column name="Opmerkingen" value="te weinig" type="System.String" />
<column name="Selecteren" value="1" type="System.String" />
<column name="DefaultKey" value="1" type="System.Int32" />
</columns>
</row>
</rows>
<key>DefaultKey</key>
<total>0</total>
<AddOnKey>0</AddOnKey>
<data />
<parameters />
</table>
{941D5F5A-156A-4F19-A3B0-111E9825707B}
默认键
0
0
最好分解XML,通过引用命名属性而不是它们的位置来获取所需的数据
SQL
非常确定MySQL不支持这种语法,这种SQL方言语法可能与SQL Server(MSSQL)更相关..echoing@RaymondNijland:这不是MySQL语法。看起来更像Transact-SQL(Microsoft SQL Server)。“呼应”yea同意@spencer7593我应该说这不是MySQL语法,而是@RaymondNijland抱歉,这不是MySQL,而是MSSQL(Microsoft SQL Server)。谢谢你的观察。
DECLARE @xml XML = '
<table>
<id>{941D5F5A-156A-4F19-A3B0-111E9825707B}</id>
<rows>
<row>
<columns>
<column name="Artikelen" value="102535.A.M2" type="System.String"/>
<column name="Batchnummer" value="19D1739/133" type="System.String"/>
<column name="Aantal" value="8" type="System.Int32"/>
<column name="Opmerkingen" value="te weinig" type="System.String"/>
<column name="Selecteren" value="1" type="System.String"/>
<column name="DefaultKey" value="1" type="System.Int32"/>
</columns>
</row>
</rows>
<key>DefaultKey</key>
<total>0</total>
<AddOnKey>0</AddOnKey>
<data/>
<parameters/>
</table>';
SELECT col.value('(column[@name="Artikelen"]/@value)[1]','VARCHAR(255)') AS [Artikelen]
, col.value('(column[@name="Batchnummer"]/@value)[1]','VARCHAR(255)') AS [Batchnummer]
, col.value('(column[@name="Aantal"]/@value)[1]','INT') AS [Aantal]
FROM @XML.nodes ('/table/rows/row/columns') AS tab(col);
+-------------+-------------+--------+
| Artikelen | Batchnummer | Aantal |
+-------------+-------------+--------+
| 102535.A.M2 | 19D1739/133 | 8 |
+-------------+-------------+--------+