【问题标题】:Import into SQL Server 2003 from a CSV file Error从 CSV 文件导入 SQL Server 2003 错误
【发布时间】:2013-06-04 06:34:22
【问题描述】:

我花了很多时间尝试使用 SSMS (2012) 将 CSV、Excel 数据导入 SQL Server 2003。我尝试以 excel、CSV 和文本文件的形式导入,所有选项都出现了自己的问题。

现在最大的挫折是在 Flatfile 选项下导入 CSV 时。在“高级”选项卡中,我已将源日期列设置为 [DT_DBTIMESTAMP] 这与我的目标日期列的类型 [DT_DBTIMESTAMP] YET 匹配,尽管当我运行导入 SQL Server 错误并说

• 错误 0xc02020a1:数据流任务 1:数据转换失败。列的数据转换返回状态值 2 和状态文本“由于可能丢失数据,无法转换该值。”。 (SQL Server 导入和导出向导)。

如果两列的类型完全相同,这怎么会失败?

提前感谢您的帮助。

【问题讨论】:

  • 首先,没有SQL Server 2003,所以请说明您拥有的是哪个版本。其次,平面文件中的数据始终是字符串,直到您将其转换为编程语言中的数据结构。日期的格式很可能是向导无法正确识别的,这可能是因为您的区域设置。由于您实际上没有显示任何示例数据,因此很难说是否是这种情况。您可能希望将数据导入varchar 列,然后使用 TSQL 进行转换,或者使用完整的 SSIS 包,以便您可以控制平面文件连接器上的区域设置。
  • 澄清:Windows Server 2003。我使用的是 SSMS 2012。我的文本文件是制表符分隔的。所以我将文本文件中的第一行/第一行作为我的列名。连续的行是每行中的不同值。例如:(第 1 行)ID LogID EnterDate LeaveDate(第 n 行)132.. 3233... 10/4/10 0:00 10/13/10 0:00

标签: sql-server csv-import


【解决方案1】:

我发现 SQL Server 导入向导(我使用的是 2008 R2 版本)、从 CSV 文件中读取日期字段、当格式为拉丁文时存在许多问题 - 日期在月份之前,比如 25/12/2013(圣诞节)。看起来它总是假设 MM/DD/YYYY,并且没有明确的方法可以告诉读取为 DD/MM/YYYY(或者我没有找到)。如果我解决,将发布。谢了。

【讨论】:

    【解决方案2】:

    可能不是 SQLServer 在导入时抱怨丢失数据,而是在读取时抱怨。例如,DT_DBTIMESTAMP 类型需要格式 yyyy-mm-dd hh:mm:ss[.fff]。如果您的数据在任何维度上的格式都不正确(例如您的 mm > 12 或 dd > 31),则可能是问题所在。就像@Pondlife 建议的那样,我将所有内容都放入一个 varchar(max) 字段,然后运行 ​​TSQL 以查看是否所有行都可以转换为 DBTIMESTAMP 数据类型是一个简单的转换语句。

    【讨论】:

    • 让我感到困惑的是,在我的导入工具的“查看数据类型映射”屏幕中,源列中有一个绿色复选标记,SQL Server 声称转换将在目标中进行柱子。我想这是完全信任导入工具的天真方法。我的文本文件中的日期不是“yyyy-mm-dd hh:mm:ss”作为典型的日期列。那么首先在我的文本文件中解决这个问题的解决方案之一是什么?此外,我在转换时没有 varchar(max) 字段。我拥有的最好的是 string[DT_STR] ......而且我已经将列更改为 string[DT_STR] 没有运气
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-20
    • 1970-01-01
    • 2015-03-22
    • 1970-01-01
    相关资源
    最近更新 更多