【问题标题】:SSIS importing datetime column into SQL Server 2008SSIS 将日期时间列导入 SQL Server 2008
【发布时间】:2012-08-10 09:58:06
【问题描述】:

我正在尝试使用 SSIS 将 PSV 文件导入 SQL Server 2008。

除了一个包含datatime 的字段外,一切正常。

导入的文件内容包含日期时间,格式为

2012-08-08T13:31:28.170

PSV 文件的文件连接器设置是数据库时间戳,精度为 [DT_DBTIMESTAMP2]

SQL Server 中的目标列具有 datetime 数据类型。

SQL表的包/内容的结果是一个日期时间导入:

2012-08-08 00:00:00.000

您会注意到分钟/秒尚未导入。

我一定是使用了错误的日期时间格式,但似乎尝试了所有组合都没有成功。

谁能指出我正确的方向?

【问题讨论】:

    标签: sql ssis dts


    【解决方案1】:

    tl;博士

    使用 DT_DBTIMESTAMP 作为您的类型并将 fastParse 设置为 true

    设置

    我创建了一个包含以下行的 CSV。由于 SQL Server 的日期时间精度仅为 0.003 毫秒,这将确保任何舍入问题都会浮出水面

    2012-08-08T13:31:28.170
    2012-08-08T13:31:28.171
    2012-08-08T13:31:28.172
    2012-08-08T13:31:28.173
    

    我创建了我的目标表

    CREATE TABLE [dbo].[datetime2Demo]
    (
        [EventDate] [datetime2](7) NOT NULL
    ,   [insert_date] [datetime2](7) NOT NULL DEFAULT(current_timestamp)
    ,   [string_type] [varchar](50) NULL
    ) ON [PRIMARY]
    

    然后我创建了一个名为 dt_dbtimestamp 的连接管理器,并在 Advanced 下定义了一列,名称为 EventDate,数据类型为 database timestamp [DT_DBTIMESTAMP]

    在我的数据流中,我添加了一个平面文件源并使用了上述连接管理器。

    然后我右键单击平面文件源并选择Show Advanced Editor。在“输入和输出属性”选项卡上,我展开了我的平面文件源输出控件并再次展开了输出列,然后选择了我的 EventDate。在自定义属性下,我将 FastParse 的默认值从 False 更改为 True

    我有一个派生列,它添加了 string_type 值 (DT_STR,20,1252)"DT_DBTIMESTAMP",因此我可以跟踪哪些有效,哪些无效。

    我使用了一个 OLE DB 目标并将其连接到我创建的表。

    结果

    SELECT EventDate, string_type FROM dbo.datetime2Demo

    EventDate                      string_type
    2012-08-08 13:31:28.0000000    DT_DBTIMESTAMP2
    2012-08-08 13:31:28.0000000    DT_DBTIMESTAMP2
    2012-08-08 13:31:28.0000000    DT_DBTIMESTAMP2
    2012-08-08 13:31:28.0000000    DT_DBTIMESTAMP2
    2012-08-08 13:31:28.0000000    DT_DATE
    2012-08-08 13:31:28.0000000    DT_DATE
    2012-08-08 13:31:28.0000000    DT_DATE
    2012-08-08 13:31:28.0000000    DT_DATE
    2012-08-08 00:00:00.0000000    DT_DBDATE
    2012-08-08 00:00:00.0000000    DT_DBDATE
    2012-08-08 00:00:00.0000000    DT_DBDATE
    2012-08-08 00:00:00.0000000    DT_DBDATE
    2012-08-10 13:31:28.0000000    DT_DBTIME2
    2012-08-10 13:31:28.0000000    DT_DBTIME2
    2012-08-10 13:31:28.0000000    DT_DBTIME2
    2012-08-10 13:31:28.0000000    DT_DBTIME2
    2012-08-08 13:31:28.1700000    DT_DBTIMESTAMP
    2012-08-08 13:31:28.1710000    DT_DBTIMESTAMP
    2012-08-08 13:31:28.1720000    DT_DBTIMESTAMP
    2012-08-08 13:31:28.1730000    DT_DBTIMESTAMP
    

    【讨论】:

      【解决方案2】:

      我曾经遇到过类似的情况,问题出在源头上,而不是目的地上。

      我建议您通过右键单击 SourceComponent 来检查该字段,选择显示高级编辑器 -> 输入和输出属性 -> 展开“输出列” -> 选择您的列并更改为适当的数据类型(通常 [ DT_DBTIMESTAMP] 对我来说很好)。同样为了测试,在“输出列”上做同样的事情

      【讨论】:

      • 我总是将ValidateExternalMetadata 设置为false。如果我不这样做,我在Output / input columns 中设置的值只会重置。您对此有什么建议,或者您是否也在这样做?
      • 您好,感谢您的帮助。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多