SSIS将具有不同类型列的表导出到平面文件中

Mou*_*uru 2 xml sql-server ssis export flat

我正在开发 SSIS 包。

我有一张表如下:

表名称:Employee_table

EmployeID     EmployeeName     EmployeeDataXML
==============================================
1             Mark            <Age>32</Age><Role>Manager</Role>
2             Albert          <Age>31</Age><Role>Staff</Role>
==============================================
Run Code Online (Sandbox Code Playgroud)

该表必须导出到名为:Employeedata.dat 的平面文件中

文件中的内容应如下所示:

<EmployeeID>1</EmployeeID><EmployeeName>Mark</EmplyeeName><EmployeeDataXML><Age>32</Age><Role>Manager</Role></EmployeeDataXML>
<EmployeeID>2</EmployeeID><EmployeeName>Albert</EmplyeeName><EmployeeDataXML><Age>31</Age><Role>Staff</Role></EmployeeDataXML>
Run Code Online (Sandbox Code Playgroud)

基本上,employeeid 和employeename 列不是xml 格式,但当导出发生时,它们也应该包含在xml 中。

有人可以指导我哪一个是最好的方法吗?我需要在这里使用任何转换吗?是否有任何可用的控制/任务?编写一条 SQL Select 语句可以简单地解决这个问题吗?

请指导。

Sol*_*zky 5

是的,一个简单的SELECT使用FOR XML PATH应该可以解决这个问题:

DECLARE @TestData TABLE
(
  EmployeID INT NOT NULL,
  EmployeeName NVARCHAR(50) NOT NULL,
  EmployeeDataXML XML
);

INSERT INTO @TestData (EmployeID, EmployeeName, EmployeeDataXML)
  VALUES (1, N'Mark', N'<Age>32</Age><Role>Manager</Role>');
INSERT INTO @TestData (EmployeID, EmployeeName, EmployeeDataXML)
  VALUES (2, N'Albert', N'<Age>31</Age><Role>Staff</Role>');


SELECT EmployeID, EmployeeName, EmployeeDataXML
FROM   @TestData
FOR XML PATH(N'Employee');
Run Code Online (Sandbox Code Playgroud)

产生以下结果:

<Employee>
  <EmployeID>1</EmployeID>
  <EmployeeName>Mark</EmployeeName>
  <EmployeeDataXML>
    <Age>32</Age>
    <Role>Manager</Role>
  </EmployeeDataXML>
</Employee>
<Employee>
  <EmployeID>2</EmployeID>
  <EmployeeName>Albert</EmployeeName>
  <EmployeeDataXML>
    <Age>31</Age>
    <Role>Staff</Role>
  </EmployeeDataXML>
</Employee>
Run Code Online (Sandbox Code Playgroud)

您没有<Employee>在示例输出中显示父元素,但我认为如果没有某些元素将字段元素包装到“行”中,该文件将无法使用。