我希望在导出到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。
答案 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来跟踪从外键(从属列)到主键(主列),然后当我想跟踪引用时,我使用此表进行查找。
我无法共享代码,但这是一个简单的查询。