Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.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
C# 使用外键将SQL Server 2012数据库导出为XML_C#_Xml_Ssis_Sql Server 2012 - Fatal编程技术网

C# 使用外键将SQL Server 2012数据库导出为XML

C# 使用外键将SQL Server 2012数据库导出为XML,c#,xml,ssis,sql-server-2012,C#,Xml,Ssis,Sql Server 2012,在这个线程中,除了导出为xml之外,我希望做的是,对于作为外键的每一行,我还希望包含该引用的xml表示 例如,表Employee: EID(PK) Name Supervisor(FK) 1 John NULL 2 Kevin 1 应将XML输出为: <Employees> <Employee> <EID>1</EID> <N

在这个线程中,除了导出为xml之外,我希望做的是,对于作为外键的每一行,我还希望包含该引用的xml表示

例如,表Employee:

EID(PK)   Name  Supervisor(FK)  
  1       John       NULL  
  2       Kevin       1
应将XML输出为:

<Employees>  
    <Employee> 
       <EID>1</EID>  
       <Name>John</Name>
       <Supervisor>NULL</Supervisor>
    </Employee>
    <Employee>
       <EID>2</EID>
       <Name>Kevin</Name>
       <Supervisor>
            <EID>1</EID>
            <Name>John</Name>
               <Supervisor>NULL</Supervisor>
       </Supervisor>
    </Employee>
</Employees>

1.
约翰
无效的
2.
凯文
1.
约翰
无效的
我正在寻找C#(如果我能找到知道DataColumn是外键的方法)或SSIS中的解决方案。

试试这段代码。通过在
ELEMENTS
指令上指定可选的
xsini
参数,您可以请求为
NULL
值创建一个元素。在这种情况下,将为每个
NULL
列值返回xsi:nil属性设置为TRUE的元素,并在根目录下创建对
xmlns命名空间的引用

DECLARE @Employee TABLE([EID] INT, [Name] NVARCHAR(5), [Supervisor] INT);

INSERT INTO @Employee
    ([EID], [Name], [Supervisor])
VALUES
    (1, 'John', NULL),
    (2, 'Kevin', 1),
    (3, 'Paul', 1),
    (4, 'Joe', 2);

SELECT T1.EID, T1.[Name],
    (SELECT T2.EID, T2.[Name]
       FROM @Employee T2
      WHERE T2.EID = T1.Supervisor
        FOR XML PATH('Supervisor'),TYPE)
  FROM @Employee T1
   FOR XML PATH('Employee'), ROOT ('Employees'), Elements XSINIL
返回:

<Employees xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <Employee>
    <EID>1</EID>
    <Name>John</Name>
  </Employee>
  <Employee>
    <EID>2</EID>
    <Name>Kevin</Name>
    <Supervisor>
      <EID>1</EID>
      <Name>John</Name>
    </Supervisor>
  </Employee>
  <Employee>
    <EID>3</EID>
    <Name>Paul</Name>
    <Supervisor>
      <EID>1</EID>
      <Name>John</Name>
    </Supervisor>
  </Employee>
  <Employee>
    <EID>4</EID>
    <Name>Joe</Name>
    <Supervisor>
      <EID>2</EID>
      <Name>Kevin</Name>
    </Supervisor>
  </Employee>
</Employees>

1.
约翰
2.
凯文
1.
约翰
3.
保罗
1.
约翰
4.
乔
2.
凯文

我构建了一个表,该表结合了键列用法和引用约束,以从外键(依赖列)跟踪到主键(主列),然后当我想要跟踪引用时,我使用该表进行查找


我无法共享代码,但这是一个简单的查询。

欢迎使用StackOverflow:如果您发布代码、XML或数据示例,请在文本编辑器中突出显示这些行,并单击编辑器工具栏上的“代码示例”按钮(
{}
),以很好地格式化和语法突出显示它!这样,您的XML结构就可以很好地看到。如果答案是有用的,请不要忘记接受它作为答案。我认为输出不太正确。凯文只有1名主管(约翰),但据报道有2名主管(他本人和保罗)不正确。保罗和乔也是如此。此外,查询不是递归的。最终,我将用XML构建一个图形。根据您的查询,我认为它应该是T1.Supervisor=T2.EID。您知道一种递归方式吗?一个主管也可能有其他主管。应该是递归表达式的方法。