使用外键将SQL Server 2012数据库导出到XML

时间:2012-08-28 06:22:14

标签: c# xml ssis sql-server-2012

我希望在导出到xml之前做的就像在这个线程SQL DB to 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>

我正在寻找C#中的解决方案(如果我能找到一种方法来了解DataColumn是外键)或SSIS。

2 个答案:

答案 0 :(得分:2)

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

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 :(得分:0)

我构建了一个表,它结合KEY_COLUMN_USAGE和REFERENTIAL_CONSTRAINTS来跟踪从外键(从属列)到主键(主列),然后当我想跟踪引用时,我使用此表进行查找。

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