SQL Server 2005导入csv文件,按正确顺序排列

问题描述:

我使用SQL Server向导导入csv文件,但导入的行以不同的顺序出现。我怎么能说SQL Server以正确的顺序导入行。SQL Server 2005导入csv文件,按正确顺序排列

+0

什么是CSV中的“正确顺序”? SQL没有隐式顺序 - 您必须通过在SQL查询中指定ORDER BY来定义一个顺序。 – 2010-01-03 16:17:04

+0

Duplicate:http://*.com/questions/1793147/sql-best-practice-to-deal-with-default-sort-order – 2010-01-03 17:52:55

+0

他的意思是“正确的顺序” - 导入时进行。 如果我添加标识列并加载XLS文件,标识列的值将对应XLS文件中的行顺序? – MaratSh 2011-09-02 09:46:45

在数据库中不存在记录顺序,而不是编号电子表格行,您需要一个列来排序。 你会使用类似

SELECT * FROM myTable ORDER BY SomeColumn 
+0

+1,但对于数据库而言,您确实意味着由E.F.Codd定义的“关系数据库”,因为之前和之后都有其他类型的数据库。 – 2010-01-03 15:08:41

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

再回到原来的问题,我从Outlook根据需要通过一次测序的消息,则在时间与期望的文件夹中选择了一个月的倍数,然后做出口电子邮件FILE SAVE AS选项,而不是Outlook Export功能,该功能似乎保持了正确的顺序。它们被导出为没有使用分隔符的文本。

我在SQL Server中创建了只包含标识列和varchar(4000)列的表。使用行分隔符CRLF并且没有字段分隔符用于导入。到目前为止,这似乎是以正确的顺序保留消息中的每一行。你可以在表格上创建唯一的索引,或者在ident列中指定ORDER BY,并且在我认为迄今为止的正确序列中很好地查看电子邮件。

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

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