SSIS中的动态列映射

时间:2014-07-03 14:43:34

标签: ssis

我有一个excel源,sql数据库是目的地。这里的问题是excel列名每周都会更改。他们可能会添加新列或重新命名列/有时会删除一些列。因此,只要excel列发生更改,ssis就会抛出错误,我不得不再次手动映射它们。有什么方法可以自动完成吗? 请帮忙

2 个答案:

答案 0 :(得分:0)

由于您的源列不断更改,您需要编写自定义脚本,您可以根据源上发生的更改来放置逻辑。

脚本逻辑应该是,获取excel文件,读取列标题然后推断出如何处理excel。然后,您可以将此excel重定向到适当的组件。

答案 1 :(得分:0)

我能想到的唯一方法是使用脚本组件。基本上,您需要做的是:

  1. 将Excel文件数据读入DataTable;见:Reading Excel files from C#
  2. 创建一个列表,其中包含从Excel文件中读入的所有列名。我们将使用它来比较目标SQL表的字段名称。
  3. 创建一个包含目标SQL表的所有列名的列表。
  4. 将您的列表与一些模糊匹配逻辑进行比较,以查看Excel文件和SQL表之间的列名是否相同。您可以使用的算法将取决于变量Levenshtein如何成为这样做的好方法:http://www.dotnetperls.com/levenshtein
  5. 根据您在上面步骤4中的比较,动态构建SQL查询以编写新Excel列的所有ALTER TABLE / ADD COLUMN语句。
  6. 将上述步骤1中的DataTable加载到SQL表中,使用SQLBulkCopy的ColumnMapping类映射步骤4中的模糊匹配列名。http://msdn.microsoft.com/en-us/library/System.Data.SqlClient.SqlBulkCopyColumnMapping(v=vs.110).aspx