SSIS - CSV到SQL Server数据导入错误

时间:2013-02-10 08:15:56

标签: csv ssis

我正在尝试使用SSIS将数据导入到SQL Server表中。 使用文件源任务和SQL Server目的地,包很简单。

CSV文件有两个字段Transaction_Date和Account_Created。这些字段中的日期是1/2/2009 6:00:00 AM的格式。我看到以下错误消息: “错误:数据插入期间发生异常,从提供程序返回的消息是:数据源中String类型的给定值无法转换为指定目标列的datetime类型。”

我在下面尝试的步骤: 我尝试使用各种其他目标转换。 我尝试在Flatfile连接管理器中使用数据类型。 我尝试使用源任务和SQL Server目标之间的数据转换转换。

当我尝试通过仅提供与Transaction_Date的连接来加载数据时,它可以工作。但是,当我尝试通过仅提供与Account_Created的连接来加载时,它会失败。

我确信我错过了一些愚蠢的话。请帮忙。

此致 KK

我厌倦了一种不同的方法来开始使用向导来构建包。我使用了实际的CSV文件,其中包含许多其他列,如Price,Product_name等。当我尝试执行包时,我看到一个不同的错误消息,如下所示: “[AdventureWorks的目标[58]]错误:输入”OLE DB目标输入“(71)上的输入列”价格“(91)出错。返回的列状态为:”无法转换该值,因为可能会丢失数据。“ “ 当我尝试只有2个日期字段的CSV文件时,效果非常好。

我现在真的很困惑,并认为这是某种数据类型问题,我没有弄清楚它。有人会对这个问题有所了解吗?

此致 KK

1 个答案:

答案 0 :(得分:2)

要加载前两个字段(Transaction_Date,Account_Created),您需要一个包含以下内容的DataFlow任务:

  • Flatfile来源
  • 派生列(使用下面的公式创建两列以替换'Transaction_Date'和'Account_Created')
  • SQL Server目的地

注意:

  • SSIS未解析类似'1/2/2009 6:00:00 AM'的日期格式,请确保Flatfile连接管理器将字段视为字符串(长度> 22)
  • 在派生列中,您可以使用以下公式解析'01 / 02/2009':

    (DT_DBDATE)(SUBSTRING([第2栏],7,4)+“ - ”+ SUBSTRING([第2栏],4,2)+“ - ”+ SUBSTRING([第2栏],1,2) )

  • 由于缺少SSIS的高级日期时间解析功能,您在文件'1/2/2009'中的当前日期格式使转换变得非常棘手。根据日期和月份,您必须从可变长度字符串中减去,因此您必须将SUBSTRING与FINDSTRING组合以确定分隔符的位置'/'

祝你好运