2

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

例如员工表:

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 中的解决方案。

4

2 回答 2

2

试试这个代码,也在 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>
于 2012-08-28T06:45:17.270 回答
0

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

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

于 2012-09-21T16:34:22.853 回答