Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.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 使用SSIS将XML数据加载到表中_Sql Server_Ssis - Fatal编程技术网

Sql server 使用SSIS将XML数据加载到表中

Sql server 使用SSIS将XML数据加载到表中,sql-server,ssis,Sql Server,Ssis,我有一个如下所示的XML <MYLIST> <Frame Id="89900981" Name="Gxown" Qty="0.0"> <Frame Id="354653-01" Name="Frametop" Qty="1.0" /> <Frame Id="656997-

我有一个如下所示的XML

<MYLIST>
        <Frame Id="89900981" Name="Gxown" Qty="0.0">
          <Frame Id="354653-01" Name="Frametop" Qty="1.0" />
          <Frame Id="656997-23" Name="FrameNM" Qty="1.0" />
          <Frame Id="776879921" Name="PINOBK" Qty="2.0" />
        </Frame>
</MYLIST>
+----------+-----------+----------+-----+
| HEAD     | SUBS      | NAME     | QTY |
+----------+-----------+----------+-----+
| 89900981 | 354653-01 | Frametop | 1.0 |
+----------+-----------+----------+-----+
| 89900981 | 656997-23 | FrameNM  | 1.0 |
+----------+-----------+----------+-----+
| 89900981 | 776879921 | PINOBK   | 2.0 |
+----------+-----------+----------+-----+           
基本上,在MYLIST节点下,第一个节点帧是所有节点的头部。所以我想把它放在HEAD列中,它下面的所有行和SUBS列中的其他行都是一样的。这可能吗?我尝试过使用输出MYLIST\u Frame\u Frame。有了这个,我可以加载SUBS、NAME和QTY列,但是头部在MYLIST_框架中可用。我不知道如何组合这个。我已经尝试使用合并,但这是插入头作为一个单独的行

您可以在包中使用此代码: 答案的核心部分是关于使用openxml函数。 它有三个参数,其中第二个参数为xpath格式

"


请不要只发布代码作为答案,还要解释代码的作用以及它是如何解决问题的。带解释的答案通常更有帮助,质量也更好,更有可能吸引更多的选票。谢谢。但我正在寻找SSIS解决方案,而不是SQL代码。
declare @Xml nvarchar(4000) = '
<MYLIST>
    <Frame Id="89900981" Name="Gxown" Qty="0.0">
      <Frame Id="354653-01" Name="Frametop" Qty="1.0" />
      <Frame Id="656997-23" Name="FrameNM" Qty="1.0" />
      <Frame Id="776879921" Name="PINOBK" Qty="2.0" />
    </Frame>
declare @idoc INT
EXEC sp_xml_preparedocument @idoc OUTPUT, @Xml;
select
    (select
        Id as Head
     from openxml(@idoc, '/MYLIST/Frame', 1) 
     with (Id nvarchar(32))) as Head,
    Id as SUBS,
    [Name],
    Qty
from openxml(@idoc, '/MYLIST/Frame/Frame[position()<=3]', 1)
with 
    (Id nvarchar(32),
     [Name] nvarchar(32),
     [Qty] decimal(2,1))