我从其中一列以XML格式获取数据。该列称为“更新”,表为“审计”。该领域是这样的:尝试从SQL Server获取XML字段
<Fields><Field Name="DateFrom"/><Field Name = "Type 1"/><Field Name = "Type 2/></Fields>
<Fields><Field Name = "DateFrom"/></Fields>
<Fields><Field Name="DateFrom"/><Field Name = "Note"/><Field Name = "Type 1"/></Fields>
的XML领域是一个更大的查询的一部分:
Select id, Updated
from Audit
最终会看起来像下文中,ID是一个非XML列。
ID Updated
123 DateFrom, Type1, Type2
323 DateFrom
455 DateFrom, Note, Type1
我试过一些我在网上找到的东西,但我没有正确地做到这一点。我尝试的一种方法是:
Select Updated.value('/Fields/Field Name)[1]', 'nvarchar(max)') as NewUpdated from Audit.
任何想法?
如果你需要得到_each_场,你应该使用交叉与XML节点申请。如果你只需要第一个,你可以调整你当前的查询:'(Fields/Field/@ Name)[1]'。交叉应用可以这样工作:'SELECT NewUpdated = ABvalue('@ Name','nvarchar(max)')FROM Audit CROSS APPLY Audit.Updated.nodes('Fields/Field')AS A(B);' – ZLK
我需要获得所有的字段。我正在尝试跨应用,但我得到一个错误:“Audit.updated.nodes'不是一个可识别的函数名称。我试着这样:select newupdated = ABvalue('@ name','nvarchar(max )'from Audit Cross Apply Audit.updated.nodes('Fields/Field')as A(B); – jackstraw22
呃,你使用的是什么版本的SQL Server?在你粘贴的明显错字之外(没有闭括号'.value(...)'),没有理由我想不出为什么除非你使用SQL Server 2005,否则不行。 – ZLK