【问题标题】:SSIS Choosing Wrong Data TypeSSIS 选择了错误的数据类型
【发布时间】:2021-08-04 20:32:31
【问题描述】:

我在 SQL Server 2016 中使用以下定义创建了一个表:

CREATE TABLE Stage.Test (f1 DATE NULL);

INSERT INTO Stage.Test (f1) VALUES ('1/1/2000');

注意 f1 列使用 DATE 数据类型。

然后我在 SQL Server Data Tools (VS 2019) 中创建了一个数据流任务来从该表加载数据。我创建了一个 OLEDB 源组件并将源表设置为 Stage.Test。但是当我检查“f1”列的数据类型(在“外部列”和“输出列”列中)时,它说它是一个 Unicode 字符串:

为什么选择 Unicode 字符串而不是 DT_DATE?

【问题讨论】:

  • 这很神秘——我从未见过 SSIS 这样做。
  • 是的,我也没有。你能重现这种行为吗?

标签: ssis dataflowtask


【解决方案1】:

当涉及到日期字段时,我还没有看到这个确切的示例,但是当 SSIS 检测到该字段属于某种类型时,它会自动转换数据。也许是您的日期字段中的“/”做到了。我们在世界这些地区不使用这种日期格式,所以我从来没有遇到过这个问题。当您使用 SSIS 导入 excel 文件时,您尤其可以看到这一点。我通常对字符串有这个问题,其中 unicode 字符串有时会变成非 unicode 字符串。

一种解决方法可能是:

  1. 编辑 sql 查询以将字段显式转换为日期
  2. 在数据流中的源之后添加一个转换步骤(如派生列以正确的顺序获取字符串的各个部分)
  3. 尝试通过右键单击数据流中的源并使用高级编辑器来更改输出数据类型,然后编辑输出列数据类型: SSIS Source Advanced Editor Output

我不确定这 3 是否适用于这个日期格式问题,因为我自己没有使用这种格式的经验,但它可以很好地解决我的 unicode/non-unicode 问题。

【讨论】:

  • 感谢您的建议。我当前的解决方法是简单地将表中“f1”列的数据类型从 DATE 更改为 DATETIME。在这种情况下,SSIS 似乎可以正确确定正确的数据类型。不理想,但它有效。仍然想知道为什么它与 DATE 数据类型有问题。
  • 但是表中的数据类型是相当明确的DATE。所以 SSIS 应该反映这一点。是的,你肯定会在 text 和 excel 之类的东西上看到这个问题,因为它们没有数据类型,而且 excel 和 text 驱动程序都几乎没有功能。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多