Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在SQL Server 2012中从xml获取值_Sql_Xml_Sql Server 2012 - Fatal编程技术网

如何在SQL Server 2012中从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

我有大约9000行的表格,我需要从每一行中获取一些值,并从xml中命名值

表列:
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示例查看我的更新—我确实获得了预期的输出,而没有注意到该名称空间