【问题标题】:SQL Server 2005 import a csv file , rows in correct orderSQL Server 2005 导入 csv 文件,行顺序正确
【发布时间】:2010-01-03 14:36:15
【问题描述】:

我使用 SQL Server 向导导入 csv 文件,但是导入的行以不同的顺序显示。如何让 SQL Server 以正确的顺序导入行。

【问题讨论】:

  • CSV 中的“正确顺序”是什么? SQL 没有隐式顺序 - 您必须通过在 SQL 查询中指定 ORDER BY 来定义一个。
  • 他的意思是“正确的顺序” - 在导入时订购。如果我添加标识列并将 XLS 文件加载到其中,标识列的值是否会对应 XLS 文件中的行顺序?

标签: sql-server sql-order-by


【解决方案1】:

在数据库中没有记录顺序之类的东西,与编号的电子表格行相反,您需要一个列来排序。 你会使用类似的东西

SELECT * FROM myTable ORDER BY SomeColumn

【讨论】:

  • +1,但对于数据库,您实际上是指 E.F. Codd 定义的“关系数据库”,因为之前和之后都有其他类型的数据库。
【解决方案2】:

它可能以正确的顺序导入,但 SQL Server 以不同的顺序检索它们。尝试在您的表上添加一个唯一列,然后使用它作为排序依据来选择行。

【讨论】:

    【解决方案3】:

    回到最初的问题,我从 Outlook 导出电子邮件,首先根据需要对邮件进行排序,然后从所需文件夹中一次选择多个,然后执行 FILE SAVE AS 选项而不是 Outlook Export似乎保持正确顺序的功能。它们被导出为不使用分隔符的文本。

    我在 SQL Server 中创建了只包含一个标识列和一个 varchar(4000) 列的表。导入时使用行分隔符 CRLF,不使用字段分隔符。到目前为止,这似乎使消息中的每一行都保持正确的顺序。您可以在表上创建唯一索引或指定按 ident 列排序,并按照我认为正确的顺序很好地查看电子邮件。

    我正在从每条消息中的某些随机放置的行中提取字符和数字数据,因此计划使用函数 LTRIM 和 RTRIM 执行此操作,然后使用指向每个字符的指针,直到找到下一个空格,检查每个组是否存在字符或数字,将数字数据转换为十进制,从而将字符串中的数据解析为适当的数据类型变量。从左到右工作,当我发现一个空格时,我可以将字符串 LTRIM 到自身并轻松地将剩余数据移动到左侧。我正在处理日期、字母数字股票代码以及十进制数量和价格,因此在转换之前将使用函数 ISNUMERIC 来识别每一个,以避免错误并识别错误数据。

    重复使用 LTRIM 将轻松移动到字符串中的下一个数据项,从而减少对中间空格的单个字符扫描。

    【讨论】:

      猜你喜欢
      • 2014-01-06
      • 2013-02-20
      • 1970-01-01
      • 1970-01-01
      • 2011-10-09
      • 1970-01-01
      • 1970-01-01
      • 2015-03-22
      相关资源
      最近更新 更多