C# 使用外键将SQL Server 2012数据库导出为XML
在这个线程中,除了导出为xml之外,我希望做的是,对于作为外键的每一行,我还希望包含该引用的xml表示 例如,表Employee: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
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。您知道一种递归方式吗?一个主管也可能有其他主管。应该是递归表达式的方法。