2010-01-03 5 views
1

J'utilise l'Assistant SQL Server pour importer des fichiers CSV, mais les lignes importées apparaissent dans un ordre différent. Comment puis-je dire à SQL Server d'importer les lignes dans le bon ordre.SQL Server 2005 importer un fichier csv, lignes dans l'ordre correct

+0

quel est le "bon ordre" dans votre CSV ?? SQL n'a pas d'ordre implicite - vous devez en définir un en spécifiant ORDER BY dans votre requête SQL. –

+0

Dupliquer: http://stackoverflow.com/questions/1793147/sql-best-practice-to-deal-with-default-sort-order –

+0

Il signifie "ordre correct" - oreder lors de l'importation. Si j'ajoute une colonne d'identité et charge le fichier XLS, les valeurs de la colonne d'identité correspondent-elles à l'ordre des lignes dans le fichier XLS? – MaratSh

Répondre

4

Dans les bases de données, il n'existe pas d'ordre des enregistrements, contrairement aux lignes de feuille de calcul numérotées, vous avez besoin d'une colonne pour la commande. Vous utilisez quelque chose comme

SELECT * FROM myTable ORDER BY SomeColumn 
+0

+1, mais pour les bases de données, vous voulez vraiment dire "bases de données relationnelles" comme défini par E.F. Codd, car avant et depuis il y a eu des bases de données d'autres types. –

2

Il est probablement important dans le bon ordre, mais SQL Server les récupère dans un ordre différent. Essayez d'ajouter une colonne unique sur votre table, puis sélectionnez les lignes en utilisant cela comme un ordre par.

0

Pour en revenir à la question initiale, je l'exportation email à partir d'Outlook par premier séquençage des messages comme vous le souhaitez, puis en sélectionnant multiples d'un mois à la fois du dossier souhaité, puis faire l'option FILE SAVE AS au lieu de la fonction Outlook Export qui semble garder l'ordre correct jusque-là. Ils sont exportés en texte sans délimiteur utilisé.

J'ai créé des tables dans SQL Server qui contiennent uniquement une colonne d'identité et une colonne varchar (4000). Utilisez le délimiteur de ligne CRLF et aucun délimiteur de champ pour l'importation. Jusqu'à présent, cela semble maintenir chaque ligne dans les messages dans le bon ordre. vous pouvez créer un index unique sur la table OU spécifier ORDER BY la colonne ident et afficher les e-mails bien dans ce que je pense est la séquence correcte. J'extrais des caractères et des données numériques de certaines lignes placées aléatoirement dans chaque message, donc prévoyez de le faire avec les fonctions LTRIM et RTRIM, puis utilisez un pointeur sur chaque caractère jusqu'à ce que je trouve l'espace suivant, en vérifiant chaque groupe étant un caractère ou un numérique, convertissant les données numériques en décimal, et donc analysant les données des chaînes à la variable de type de données appropriée. Travaillant de gauche à droite, quand je découvre un espace, je peux LTRIM la corde à lui-même et déplacer facilement les données restantes vers la gauche. Je travaille avec des dates, des symboles boursiers alphanumériques, des quantités décimales et des prix, de sorte que chacun sera identifié avec la fonction ISNUMERIC avant la conversion pour éviter les erreurs et identifier les mauvaises données.

L'utilisation répétée du LTRIM se déplace facilement sur l'élément de données suivant dans la chaîne, ce qui réduit le balayage de caractères individuels des espaces intermédiaires.

Questions connexes