如何在SQL Server 2012中从xml获取值
我有大约9000行的表格,我需要从每一行中获取一些值,并从xml中命名值 表列:如何在SQL Server 2012中从xml获取值,sql,xml,sql-server-2012,Sql,Xml,Sql Server 2012,我有大约9000行的表格,我需要从每一行中获取一些值,并从xml中命名值 表列:Eaid,已创建,附件应用程序 XML: 约翰 史密斯 我无法在表格中得到结果。姓名和姓氏结果为空请尝试以下操作: SELECT EAId, FirstName = xc.value('(firstname)[1]', 'varchar(100)'), Surname = xc.value('(surname)[1]', 'varchar(100)') FROM dbo.YourT
Eaid
,已创建
,附件应用程序
XML:
约翰
史密斯
我无法在表格中得到结果。姓名和姓氏结果为空请尝试以下操作:
SELECT
EAId,
FirstName = xc.value('(firstname)[1]', 'varchar(100)'),
Surname = xc.value('(surname)[1]', 'varchar(100)')
FROM
dbo.YourTableName
CROSS APPLY
AttachedApplication.nodes('/NamedApplication/mainpart') AS XT(XC)
这将在您的表上“枚举”,返回EAID
列,它将“深入”XML,从该XML中获取
和
节点,并在输出中将它们作为单独的列公开
更新:如果您运行这个使用表变量的示例,它是否工作并返回值
DECLARE @Table TABLE (Eaid INT, Created DATE, AttachedApplication XML)
INSERT INTO @Table (Eaid, Created, AttachedApplication)
VALUES (1, GETDATE(),
'<NamedApplication xmlns:xs="http://www.w3.org/2001/XMLSchema-instance">
<mainpart>
<firstname>John</firstname>
<surname>Smith</surname>
<extras />
</mainpart>
</NamedApplication>')
SELECT
EAId,
FirstName = xc.value('(firstname)[1]', 'varchar(100)'),
Surname = xc.value('(surname)[1]', 'varchar(100)')
FROM
@Table
CROSS APPLY
AttachedApplication.nodes('/NamedApplication/mainpart') AS XT(XC)
DECLARE@Table表(Eaid INT、创建日期、附件应用程序XML)
插入@Table(Eaid、已创建、附件应用程序)
值(1,GETDATE(),
'
约翰
史密斯
')
挑选
EAId,
FirstName=xc.value(‘(FirstName)[1]’,‘varchar(100)’),
姓氏=xc.value('(姓氏)[1]','varchar(100)')
从…起
@桌子
交叉应用
AttachedApplication.nodes('/NamedApplication/mainpart')作为XT(XC)
试试这个:
SELECT
EAId,
FirstName = xc.value('(firstname)[1]', 'varchar(100)'),
Surname = xc.value('(surname)[1]', 'varchar(100)')
FROM
dbo.YourTableName
CROSS APPLY
AttachedApplication.nodes('/NamedApplication/mainpart') AS XT(XC)
这将在您的表上“枚举”,返回EAID
列,它将“深入”XML,从该XML中获取
和
节点,并在输出中将它们作为单独的列公开
更新:如果您运行这个使用表变量的示例,它是否工作并返回值
DECLARE @Table TABLE (Eaid INT, Created DATE, AttachedApplication XML)
INSERT INTO @Table (Eaid, Created, AttachedApplication)
VALUES (1, GETDATE(),
'<NamedApplication xmlns:xs="http://www.w3.org/2001/XMLSchema-instance">
<mainpart>
<firstname>John</firstname>
<surname>Smith</surname>
<extras />
</mainpart>
</NamedApplication>')
SELECT
EAId,
FirstName = xc.value('(firstname)[1]', 'varchar(100)'),
Surname = xc.value('(surname)[1]', 'varchar(100)')
FROM
@Table
CROSS APPLY
AttachedApplication.nodes('/NamedApplication/mainpart') AS XT(XC)
DECLARE@Table表(Eaid INT、创建日期、附件应用程序XML)
插入@Table(Eaid、已创建、附件应用程序)
值(1,GETDATE(),
'
约翰
史密斯
')
挑选
EAId,
FirstName=xc.value(‘(FirstName)[1]’,‘varchar(100)’),
姓氏=xc.value('(姓氏)[1]','varchar(100)')
从…起
@桌子
交叉应用
AttachedApplication.nodes('/NamedApplication/mainpart')作为XT(XC)
这是无效的XML-未关闭
节点。这里的收尾标签不见了吗?另外:这个XML是否包含在表的一列中?如果是,是哪列??你想从中提取什么?是的,我错过了结束。XML位于数据库的“AttachedApplication”列中。我需要获取名字和姓氏这是无效的XML,
节点未关闭。这里的收尾标签不见了吗?另外:这个XML是否包含在表的一列中?如果是,是哪列??你想从中提取什么?是的,我错过了结束。XML位于数据库的“AttachedApplication”列中。我需要知道名字和姓氏这很不幸带来了0results@Leppalintu:那么您可能在表中没有数据,或者列中的XML与您显示的内容不同……@marc_s这不是由于名称空间声明造成的吗?@TT.:否-名称空间定义了一个前缀(xs:
),但这个前缀并没有在任何地方使用,所以名称空间基本上是无用的。还可以通过runnable示例查看我的更新-我确实获得了预期的输出,但没有注意名称空间这不幸带来了0results@Leppalintu:那么您要么在表中没有数据,或者您列中的XML看起来与您显示的不同…@marc_s这不是由于名称空间声明造成的吗?@TT.:否-名称空间定义了一个前缀(xs:
),但该前缀没有在任何地方使用-因此名称空间基本上是无用的。还可以通过runnable示例查看我的更新—我确实获得了预期的输出,而没有注意到该名称空间