2013-04-07 4 views
3

J'utilise les éléments suivants MS SQL Query pour importer un fichier texte contenant des valeurs séparées par des virgules dans DB:Perfection en utilisant VRAC requête d'insertion

BULK INSERT logs 
FROM 'E:\Sample.txt' 
WITH 
(
FIELDTERMINATOR = ',', 
ROWTERMINATOR = '\n' 
) 

Malheureusement, l'un des champs dans mon fichier texte CSV contient des messages comme: "Problème dans les ports UDP (234,137)" qui contient une virgule à l'intérieur de lui-même. Par conséquent, le DB prend les valeurs avant la virgule comme un champ et insère la valeur après la virgule dans le champ suivant (ce qui est logiquement incorrect). Par conséquent, la valeur légitime de ce dernier champ est rejetée lors de l'insertion dans la table.

Espérons que mon problème est mieux expliqué.

Des solutions pour résoudre ce problème et stocker l'ensemble: "Problème dans les ports UDP (234,137)" dans un seul champ?

+0

Comment vous obtenez un fichier csv? –

+0

Les valeurs de votre fichier csv sont-elles systématiquement citées? Sinon, vous pouvez avoir [ce problème] (http://stackoverflow.com/questions/782353/sql-server-bulk-insert-of-csv-file-with-inconsistent-quotes). SQL Server semble s'attendre à ce que toutes les valeurs du fichier soient quotées ou non. Pour cette raison, je préfère prétraiter le fichier avec une langue qui a un bon support csv (Perl, Python, peu importe) et soit générer un fichier csv « propre » pour l'importation, ou tout simplement générer un script 'INSERT' directement. – Pondlife

Répondre

0

Je préfère exécuter mes fichiers CSV via un analyseur de journaux Microsoft link et en le convertissant en onglet délimité. De cette façon, l'insert en vrac le lit parfaitement.

Voici un très bon lien pour l'utilisation de l'analyseur de journal link. Créez votre commande pour lire votre csv et afficher un tsv, puis appelez-le avec xp_cmdshell.

Vous évite de créer des fichiers de format pour divers fichiers.

+0

Salut .. Merci! Quelques observations: 1) Essayé en utilisant Log parser. Mais tous mes champs apparaissent dans une seule colonne lorsqu'ils sont affichés dans Datagrid. 2) Y at-il une option disponible pour stocker la sortie TSV comme un format de fichier texte? 3) À votre avis, j'utilise C# pour mon extrémité avant. Par conséquent, je dois être capable de lire tout ce que Logparser me délivre .. Toutes Solutions: –

0

Avez-vous essayé en mettant un autre terminateur de champ?

+0

Nope! Pourquoi voulez-vous que je l'essaie? –