SSIS 将日期和时间从 txt 导入到 table 日期时间
SSIS Import a date and time from a txt to a table datetime
所以我想从 txt 导入日期时间:
2015-01-22 09:19:59
使用数据流转换为 table。我的平面源文件和目标数据库设置良好。我在高级设置中将该列的 txt 输入的数据类型以及输入和输出属性更改为:
database timestamp [DT_DBTIMESTAMP]
这与用于 table 的数据库的数据类型相同,因此应该可以。
但是,当我执行包时,我收到一条错误消息,指出数据转换失败...我该如何实现?
[Import txt data [1743]] Error: Data conversion failed. The data conversion for column "statdate" returned status value 2 and status text "The value could not be converted because of a potential loss of data.".
[Import txt data [1743]] Error: SSIS Error Code DTS_E_INDUCEDTRANSFORMFAILUREONERROR. The "output column "statdate" (2098)" failed because error code 0xC0209084 occurred, and the error row disposition on "output column "statdate" (2098)" specifies failure on error. An error occurred on the specified object of the specified component. There may be error messages posted before this with more information about the failure.
[Import txt data [1743]] Error: An error occurred while processing file "C:\Program Files\Microsoft SQL Server\MON_Datamart\Sourcefiles\tbl_L30T1.txt" on data row 14939.
在他给出错误的那一行,日期时间被空格填满了。这就是为什么在 table 上检查了 "allow nulls" 但我的 SSIS 包出于某种原因给出了错误...我可以在某个地方告诉包也允许空值吗?
建议你将数据导入到字符域中,输入后解析。
以下函数应该能帮到您:
SELECT IsDate('2015-01-22 09:19:59')
, IsDate(Current_Timestamp)
, IsDate(' ')
, IsDate('')
IsDate()
函数 returns a 1 当它 认为 值是日期和 0当不是.
这将允许您执行以下操作:
SELECT value_as_string
, CASE WHEN IsDate(value_as_string) = 1 THEN
Cast(date_as_string As datetime)
ELSE
NULL
END As value_as_datetime
FROM ...
我自己解决了。谢谢你的建议 gvee 但我做的方式更简单。
在平面文件源中,在高级选项卡中建立新连接时,我根据数据库中的 table 修复了所有数据类型,除了带有时间戳的列(在我的例子中它被称为 "statdate")!我将此数据类型更改为 STRING,否则我的平面文件源会给我一个转换错误,甚至在任何脚本能够执行之前,唯一的解决方法是设置错误输出以忽略我不想要的失败。 (在高级设置中将数据类型设置为字符串后,您仍然需要更改数据类型,方法是右键单击平面文件源 -> 显示高级编辑器 -> 转到输出列并将数据类型从日期更改为字符串。 )
将时间戳设置为字符串后,我添加了一个带有此表达式的派生列以删除所有空格,然后给它 "NULL" 值:
TRIM(<YourColumnName>) == "" ? (DT_STR,4,1252)NULL(DT_STR,4,1252) : <YourColumnName>
接下来我添加了一个数据转换以将字符串设置回时间戳。数据转换最终连接到 OLE DB 目标。
我希望这对以后遇到同样问题的人有所帮助。
最终结果:Picture of data flow
所以我想从 txt 导入日期时间:
2015-01-22 09:19:59
使用数据流转换为 table。我的平面源文件和目标数据库设置良好。我在高级设置中将该列的 txt 输入的数据类型以及输入和输出属性更改为:
database timestamp [DT_DBTIMESTAMP]
这与用于 table 的数据库的数据类型相同,因此应该可以。
但是,当我执行包时,我收到一条错误消息,指出数据转换失败...我该如何实现?
[Import txt data [1743]] Error: Data conversion failed. The data conversion for column "statdate" returned status value 2 and status text "The value could not be converted because of a potential loss of data.".
[Import txt data [1743]] Error: SSIS Error Code DTS_E_INDUCEDTRANSFORMFAILUREONERROR. The "output column "statdate" (2098)" failed because error code 0xC0209084 occurred, and the error row disposition on "output column "statdate" (2098)" specifies failure on error. An error occurred on the specified object of the specified component. There may be error messages posted before this with more information about the failure.
[Import txt data [1743]] Error: An error occurred while processing file "C:\Program Files\Microsoft SQL Server\MON_Datamart\Sourcefiles\tbl_L30T1.txt" on data row 14939.
在他给出错误的那一行,日期时间被空格填满了。这就是为什么在 table 上检查了 "allow nulls" 但我的 SSIS 包出于某种原因给出了错误...我可以在某个地方告诉包也允许空值吗?
建议你将数据导入到字符域中,输入后解析。
以下函数应该能帮到您:
SELECT IsDate('2015-01-22 09:19:59')
, IsDate(Current_Timestamp)
, IsDate(' ')
, IsDate('')
IsDate()
函数 returns a 1 当它 认为 值是日期和 0当不是.
这将允许您执行以下操作:
SELECT value_as_string
, CASE WHEN IsDate(value_as_string) = 1 THEN
Cast(date_as_string As datetime)
ELSE
NULL
END As value_as_datetime
FROM ...
我自己解决了。谢谢你的建议 gvee 但我做的方式更简单。
在平面文件源中,在高级选项卡中建立新连接时,我根据数据库中的 table 修复了所有数据类型,除了带有时间戳的列(在我的例子中它被称为 "statdate")!我将此数据类型更改为 STRING,否则我的平面文件源会给我一个转换错误,甚至在任何脚本能够执行之前,唯一的解决方法是设置错误输出以忽略我不想要的失败。 (在高级设置中将数据类型设置为字符串后,您仍然需要更改数据类型,方法是右键单击平面文件源 -> 显示高级编辑器 -> 转到输出列并将数据类型从日期更改为字符串。 )
将时间戳设置为字符串后,我添加了一个带有此表达式的派生列以删除所有空格,然后给它 "NULL" 值:
TRIM(<YourColumnName>) == "" ? (DT_STR,4,1252)NULL(DT_STR,4,1252) : <YourColumnName>
接下来我添加了一个数据转换以将字符串设置回时间戳。数据转换最终连接到 OLE DB 目标。
我希望这对以后遇到同样问题的人有所帮助。
最终结果:Picture of data flow