tl;dr
使用 DT_DBTIMESTAMP 作为类型并将 fastParse 设置为 true
Set up
我创建了一个包含以下行的 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 的连接管理器,并在“高级”下定义了一列,名称为EventDate
和数据类型database timestamp [DT_DBTIMESTAMP]
在我的数据流中,我添加了一个平面文件源并使用了上面的连接管理器。
然后我右键单击平面文件源并选择Show Advanced Editor
。在“输入和输出属性”选项卡上,我展开了平面文件源输出控件,并再次展开了输出列,然后选择了 EventDate。在自定义属性下,我更改了默认值FastParse
从假到True
我有一个添加了 string_type 值的派生列(DT_STR,20,1252)"DT_DBTIMESTAMP"
这样我就可以跟踪哪些有效,哪些无效。
我使用了 OLE DB 目标并将其连接到我创建的表。
Results
从 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