我正在尝试使用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
您会注意到尚未导入分钟/秒。
我必须使用错误的日期时间格式,但似乎尝试了所有组合而没有成功。
有人能指出我正确的方向吗?
答案 0 :(得分:8)
使用DT_DBTIMESTAMP作为您的类型并将fastParse设置为true
我创建了一个包含以下行的CSV。由于SQL Server的日期时间精度仅为.003ms,因此可确保任何舍入问题显现
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
。 On"输入和输出属性"选项卡,我扩展了我的平面文件源输出控件,并再次扩展输出列,然后选择我的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
答案 1 :(得分:7)
我遇到类似情况,问题出在我的来源上,而不是目的地。
我建议您通过右键单击它来检查SourceComponent上的字段,选择Show Advanced editor - >输入和输出属性 - >展开“输出列” - >选择您的列并更改为propper数据类型(通常[DT_DBTIMESTAMP]对我来说很好)。同样为了测试,在“输出列”
上执行相同操作