【问题标题】:SQL Server 2014 SSIS Excel Source Task import to table date and text to numeric conversion issuesSQL Server 2014 SSIS Excel 源任务导入到表格日期和文本到数字的转换问题
【发布时间】:2015-07-18 19:49:46
【问题描述】:

使用 SQL Server 2014 SSIS 通过 Excel 源数据流导入供应商提供的 Excel 文件。我遇到的两个问题与将数据转换为 SQL 表有关。

  1. 文件中有一个文本列,其中包含价格(数值),我无法将其转换为 SQL 中的数字字段(十进制(8,2))。我已使用数据转换数据流任务将其转换为 DT_NUMERIC,但无法处理该字段。我还尝试让它通过数据转换任务并通过派生列将字段转换为数字。两者都失败了,我不知道如何以十进制/数字格式将其输入数据库。

  2. 在同一个文件中有三个日期字段,其日期在 Excel 中类似于 2015 年 7 月 18 日。我已经尝试使用数据转换和派生列进行类似的尝试,以将日期作为 SQL 日期格式输入数据库。我已经将日期转换为 DT_DBDATE 和 DT_DBDATE 和 DT_DBTIMESTANP,但都没有工作我还尝试使用月日和年,并使用 Substring/left/right 函数将它们重新排列为 SQL 日期格式来拆分字符串。也无济于事。

这是我尝试过的: Excel 源 ---> 数据转换 ----> 派生列 -----> OLE DB 目标 在将日期识别为文本的 excel 源中,我将其留在数据转换中,以便在我尝试过的派生列中处理它。

一个。 (DT_DBDATE)("20" + RIGHT(TRIM(sale_start),2) + "-" + LEFT(T​​RIM(sale_start),2) + "-" + SUBSTRING(TRIM(sale_start),4,2)) - 我在有和没有修剪的情况下都做到了这一点,结果相同。我也用过 Right(sale_start,4)。

b. (DT_DBDATE) sale_start

SQL 表的数据类型为 DATE。我也将其更改为 DATETIME 并使用 DT_DBTIMESTAMP 代替上面的 DT_DBDATE。

我无法更改我收到的文件,它需要以来自供应商的方式处理到数据库中。查看excel中的数据似乎没有理由不行。

非常感谢任何有关引入这些数据的方向。

2.

【问题讨论】:

  • 当你的数据转换失败,会报什么错误?
  • 什么错误,你能举一个导致错误的数据的例子吗?

标签: sql-server excel ssis type-conversion data-conversion


【解决方案1】:

虽然我不完全了解连接设置的作用,但我能够弄清楚这一点。与 XML 文件类似,尽管派生列的某些版本是必要的,但此连接设置不是必需的,但我相信我的 XML 导入。

对于 EXCEL 解决方案: 1) 在 Excel 文件连接中,我在属性下的连接末尾添加了 IMEX=1。所以连接字符串看起来像这样:

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\SSIS\Test.xls;Extended Properties="EXCEL 8.0;HDR=YES;IMEX=1";

2) 在派生列中使用了以下脚本:

ISNULL([预期日期的副本]) ? NULL(DT_DATE) : (LEN(TRIM([预期日期的副本])) == 0 ? NULL(DT_DATE) : (DT_DATE)((DT_DBDATE)TRIM([预期日期的副本])))

感谢您抽出宝贵时间回复。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-05
    • 1970-01-01
    • 2019-07-06
    • 2017-05-14
    • 1970-01-01
    • 2013-03-25
    • 1970-01-01
    • 2014-12-02
    相关资源
    最近更新 更多