将引用的数据导入SQL,丢失数据

时间:2014-11-22 19:57:00

标签: mysql sql-server

我有3个带有制表符分隔数据的大型txt文件,这些数据用引号括起来。以下是其中一个文件的示例行:

"deleted for privacy"   185 "12/31/2005"    "01/16/2009"    "deleted for privacy"   false   1   "Accounting Issues" "deleted for privacy"   0   0   0                           1               0               0   "deleted for privacy"

我已删除了一些可能敏感的信息,但您明白了。它似乎是制表符分隔的,大多数值都用引号括起来,但不是全部。

问题是我将文件导入SQL后,两个日期列显示为空行。因此,例如,其中一个原始文件有500万行,如上所述,在这些日期列中没有空格。一旦我将它带入SQL,那些500万行中大约有一百万在这些日期列中没有值。我在导入过程中没有收到任何错误。

3个大文件中的一个足够小,我可以在记事本中打开它,并在导入SQL之前从所有值中删除引号。这似乎解决了这个问题。如果在导入SQL之前删除引号,则似乎没有丢失日期值。问题是3个文件中有2个太大而无法在记事本中打开以删除引导前的引号。

1 个答案:

答案 0 :(得分:1)

您没有提到用于批量导入的工具,我将假设使用bcp或BULK INSERT语句。

我假设相应列的数据类型是日期时间类型。在这种情况下,SQL服务器可能会错误地将日期格式解释为dd / mm / yyyy格式(欧洲),而不是mm / dd / yyyy(美国)样式。无法在给定样式中转换的值设置为NULL。

我通常通过导入到临时表来解决数据导入问题,其中所有列都是varchar(max),然后运行后处理存储过程以将导入的行从暂存表传输到最终表,定义根据需要进行显式转换。另一种方法是使用自定义dtsx包导入,并将所需的转换定义为数据转换转换任务。