0

我正在尝试在 SSIS 中拼凑一个 C# 脚本来执行以下步骤:

  1. 建立 SQL Server 连接
  2. 要么将 SQL Server 表的全部内容读入DataTable,要么逐行处理并导出到新表(不确定使用哪种方法....)
  3. 搜索一行中的每一列,如果该行的长度为 1 且值为“-”,则将破折号替换为 NULL。他们这里的关键是我不想声明每个列名。
  4. 然后将记录写回另一个 SQL Server 表。

我是 C# 新手,所以我正在寻找最简单的方法来做到这一点。

谢谢!

4

1 回答 1

1

SSIS 做你所描述的方法是

  1. 将 OLE DB 连接管理器添加到指向源服务器的包
  2. 将数据流任务添加到您的控制流中
  3. 编写一个SELECT语句来拉回符合您的条件的列。SELECT col1, col2 FROM dbo.MyTable T WHERE T.col1 = '-' OR T.col2 = '-';实际实施可能会有所不同。将该查询放在 OLE DB 源组件中
  4. 添加派生列组件以将 - 转换为 NULL 值
  5. 添加 OLE DB 目标以写入新表

但是,更好的方法是不存储这些数据,并在将其放入表中之前保持其清洁。除此之外,我可能会考虑使用执行 SQL 任务来触发查询以清理服务器上的数据。无需逐行处理。您描述了集合(长度为 1 且值为 的任何内容-),因此修复集合 ( UPDATE T SET col1 = NULLIF(Col1, '-'), ... FROM dbo.MyTable T)

于 2013-10-03T16:28:53.027 回答