2010-01-03 107 views
1

我使用SQL Server嚮導導入csv文件,但導入的行以不同的順序出現。我怎麼能說SQL Server以正確的順序導入行。SQL Server 2005導入csv文件,按正確順序排列

+0

什麼是CSV中的「正確順序」? SQL沒有隱式順序 - 您必須通過在SQL查詢中指定ORDER BY來定義一個順序。 – 2010-01-03 16:17:04

+0

Duplicate:http://stackoverflow.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

回答

4

在數據庫中不存在記錄順序,而不是編號電子表格行,您需要一個列來排序。 你會使用類似

SELECT * FROM myTable ORDER BY SomeColumn 
+0

+1,但對於數據庫而言,您確實意味着由E.F.Codd定義的「關係數據庫」,因爲之前和之後都有其他類型的數據庫。 – 2010-01-03 15:08:41

2

它可能導入的順序是正確的,但SQL服務器以不同的順序檢索它們。嘗試在表上添加一個唯一的列,然後使用該列作爲排序依據來選擇行。

0

再回到原來的問題,我從Outlook根據需要通過一次測序的消息,則在時間與期望的文件夾中選擇了一個月的倍數,然後做出口電子郵件FILE SAVE AS選項,而不是Outlook Export功能,該功能似乎保持了正確的順序。它們被導出爲沒有使用分隔符的文本。

我在SQL Server中創建了只包含標識列和varchar(4000)列的表。使用行分隔符CRLF並且沒有字段分隔符用於導入。到目前爲止,這似乎是以正確的順序保留消息中的每一行。你可以在表格上創建唯一的索引,或者在ident列中指定ORDER BY,並且在我認爲迄今爲止的正確序列中很好地查看電子郵件。

我從每個消息中的某些隨機放置的行中提取字符和數字數據,因此計劃使用函數LTRIM和RTRIM執行此操作,然後使用指向每個字符的指針,直到找到下一個空格,檢查每個組是字符或數字,將數字數據轉換爲十進制數,從而將字符串中的數據解析爲適當的數據類型變量。從左到右工作時,當我發現一個空間時,我可以將該字符串拉到自己的位置,並輕鬆地將剩餘的數據移動到左側。我正在處理日期,字母數字股票代碼以及小數數量和價格,因此在轉換之前,每個數據都將用函數ISNUMERIC標識以避免錯誤並識別不良數據。

重複使用LTRIM將輕鬆移動字符串中的下一個數據項,從而減少了插入空格的單個字符掃描。