我正在尝试使用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
您会注意到分钟/秒尚未导入。
我一定使用了错误的日期时间格式,但似乎尝试了所有组合都没有成功。
谁能指出我正确的方向?
tl;dr
使用 DT_DBTIMESTAMP 作为类型并将 fastParse 设置为 true
建立
我创建了一个包含以下行的 CSV。由于 SQL Server 的日期时间精度仅为 .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
.在"输入和输出属性"选项卡上,我展开了平面文件源输出控件,再次展开了"输出列",然后选择了"事件日期"。在"自定义属性"下,我将FastParse
的默认值从 False 更改为 True
我有一个派生列,它添加了string_type值(DT_STR,20,1252)"DT_DBTIMESTAMP"
,这样我就可以跟踪哪些有效,哪些无效。
我使用了 OLE DB 目标并将其连接到我创建的表。
结果
选择事件日期,string_type 从 dbo.datetime2演示
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
我曾经遇到过类似的情况,问题出在我的源上,而不是目的地上。
我建议您通过右键单击 SourceComponent 上的字段来检查它,选择显示高级编辑器 -> 输入和输出属性 ->展开"输出列" -> 切换您的列并更改为 propper 数据类型(通常 [DT_DBTIMESTAMP] 对我来说很好)。同样为了测试,请在"输出列"上执行相同的操作