8

我正在尝试使用 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

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

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

谁能指出我正确的方向?

4

2 回答 2

10

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 目标并将其连接到我创建的表。

结果

从 dbo.datetime2Demo 中选择 EventDate、string_type

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
于 2012-08-10T19:38:51.577 回答
9

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

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

于 2012-08-10T10:21:17.423 回答