以最通用的方式进行转换的关系表副本(声明性规则等等) - Microsoft sandpit

时间:2009-05-29 05:32:46

标签: ado.net ssis

我猜,这是很常见的任务。在Visual Foxpro中有一个表A,需要在SQL Server 2008中转换为表B. 操作将是重复的。可以更改列名,删除一些输入列,可以更改列类型(字符串< => int),生成一些输出列(GUID,标识)。同样可能发生规范化,其中输入表导致2与数据透视表结合 - 为了简单起见,让我们放弃这种情况

我知道SSIS存在,可能有脚本可以做我描述的内容吗?

我已经编写了C#程序,它读取XML(下面的代码片段),并映射和生成密钥生成,但只是想到是否所有 - 另一个轮子重新发明。

  <Tables>
    <Table inTbl="A" outTbl="B">
      <Keys>
        <Key name="it_pk" type="GUID">
      </Keys>
      <Mappings>
        <Column inCol="hxkey" outCol="it_tariff"  />
        <Column inCol="txt" outCol="it_description" />
        <Column inCol="uq1" outCol="it_uq1" />
        <Column inCol="date1" outCol="it_startdate" />
        <Column inCol="date2" outCol="it_stopdate" />
      </Mappings>
    </Table>
  </Tables>

2 个答案:

答案 0 :(得分:1)

这几乎就是SSIS的设计目标,但它并不像您当前的系统那样“通用”,但设置您所描述的内容非常容易。

您有控制流和数据流。您的控制流可以包含许多数据流(例如同步表A,然后是B,然后是C)和其他任务(例如移动文件,迭代,自定义脚本)。

在数据流中,您可以定义源,目标和转换。你的来源几乎可以是任何东西。然后,您可以执行派生列并更改数据类型转换以执行您所描述的操作。然后您的目标获取转换后的数据(例如SQL表,SQL插入语句,SQL更新语句)

这是使用Visual Studio完成的,我想你可以在5分钟内敲出一个简单的包以同步两个表。然后,您可以使用SQL代理安排它。

如果您想评估其他选项,这称为ETL btw(提取,转换,加载),但我认为SSIS很适合。

答案 1 :(得分:0)

除了上面的优秀答案之外,即使Visual Studio包设计器工具不合适,SSIS也是在这个空间实现编程解决方案的良好平台。

实际上,该平台比基于它构建的Visual Studio工具更灵活,更完善。