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

SQLFiddleでもこのコードを試してください。ディレクティブでオプションの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 に答える