SQL importation en bloc à partir d'un fichier CSV
J'ai besoin d'importer un grand nombre de fichier CSV dans un serveur SQL. Je suis en utilisant ceci :
BULK
INSERT CSVTest
FROM 'c:\csvfile.txt'
WITH
(
FIELDTERMINATOR = ',',
ROWTERMINATOR = '\n'
)
GO
problème est que tous mes champs sont entourés par des guillemets (" ") si une ligne ressemble réellement :
"1","","2","","sometimes with comma , inside", ""
Je peux en quelque sorte à l'importation en vrac et dire à SQL à utiliser les guillemets comme délimiteurs de champ?
Modifier: Le problème de l'utilisation de '","' comme délimiteur, comme dans l'exemple proposé est celui :
Ce que la plupart des exemples de faire, c'est de l'importation de données, y compris la première "dans la première colonne et la dernière" dans le dernier, puis ils aller de l'avant et de la bande de sortie. Hélas mon premier (et dernier) colonne de type datetime et ne permettra pas à un "20080902 à être importés en datetime.
De ce que j'ai lu, dans je pense FORMATFILE est le chemin à parcourir, mais la documentation (y compris en anglais) est terriblement unhelpfull.
- Vous devriez re-tag ce sqlserver donc, nous savons que la base de données que vous utilisez.
Vous devez vous connecter pour publier un commentaire.
Je sais que ce n'est pas une vraie solution, mais j'utilise un mannequin de table pour l'importation avec nvarchar jeu pour tout. Ensuite, je fais un insert qui supprime les " personnages et ne les conversions. Il n'est pas assez, mais il fait le travail.
Essayer
FIELDTERMINATOR='","'
Voici un lien vers l'aide à la première et à la dernière citation...regardez comment il a utilisé la sous-chaîne de la SP
http://www.sqlteam.com/article/using-bulk-insert-to-load-a-text-file
Un autre hack qui j'utilise parfois, est d'ouvrir le fichier CSV dans Excel, puis rédigez votre instruction sql dans une cellule à la fin de chaque ligne.
Par exemple:
Un remplissage vers le bas peut le remplir dans chaque ligne pour vous. Ensuite il suffit de copier et coller le résultat dans une nouvelle fenêtre de requête.
C'est de la vieille école, mais si vous avez uniquement besoin de faire des importations de temps en temps, elle vous permet d'économiser de déconner avec la lecture de tous les obscures de la documentation sur le " bon " moyen de le faire.
=SUBSTITUTE($Z$999, "placeholder_a", "'" & SUBSTITUTE(A2, "'", "''") & "'"), "placeholder_b", SUBSTITUTE(B2, "'", "''"))
. En supposant que vous avez un modèle en $Z$999.Essayer OpenRowSet. Cela peut être utilisé pour importer Excel trucs. Excel peut ouvrir des fichiers CSV, donc vous avez seulement besoin de trouver le bon [ConnectionString][2].
[2]: Driver={Microsoft Pilote De Texte (*.txt; *.csv)};Dbq=c:\txtFilesFolder\;Extensions=asc,csv,tab,txt;
Id de dire l'utilisation FileHelpers son une bibliothèque open source
Avez-vous besoin pour ce faire de la programmation, ou est-il un seul coup?
À l'aide de l'Enterprise Manager, cliquez-droit sur l'Importation de Données vous permet de sélectionner votre délimiteur.
Que vous avez à surveiller avec BCP/BULK INSERT parce que ni BSP ou Bulk Insert gérer ce bien si la citation n'est pas cohérente, même avec des fichiers de format (même les fichiers au format XML n'offrons pas la possibilité) et factice ["] personnages au début et à la fin et à l'aide de [","] comme séparateur. Techniquement les fichiers CSV n'avez pas besoin d'avoir ["] caractères s'il n'y a pas incorporé [,] personnages
C'est pour cette raison que délimité par des virgules fichiers sont parfois appelées comédie limitée fichiers.
OpenRowSet exigera Excel sur le serveur et peut être problématique dans les environnements 64 bits - je sais que c'est problématique à l'aide d'Excel dans le Jet en 64 bits.
SSIS est vraiment votre meilleur pari si le fichier est susceptible de varier par rapport à vos attentes dans le futur.
u pouvez essayer ce code qui est très douce si vous le souhaitez ,
cela permettra d'enlever les points-virgules à partir de votre code.
par exemple, si vos données se présente comme suit :
"Kelly","Reynold","[email protected]"
Sapins, vous devez importer le fichier CSV dans le Tableau de Données
Ensuite, vous pouvez insérer en vrac des lignes à l'aide SQLBulkCopy
Yup, K, Richard a raison:
FIELDTERMINATOR = '","'
Voir http://www.sqlteam.com/article/using-bulk-insert-to-load-a-text-file pour plus d'info.
Vous pouvez aussi utiliser des DTS ou SSIS.
Vous avez le contrôle sur le format d'entrée? | (tuyaux), et \t habitude de faire pour le mieux terminateurs de champ.
Si vous le trouver comment obtenir le fichier analysé dans un DataTable, je vous suggère de le SqlBulkInsert classe pour l'insérer dans SQL Server.
C'est une vieille question, donc je vous écris pour aider tous ceux qui trébuchent sur elle.
SQL Server 2017 introduit le FIELDQUOTE paramètre qui est prévu pour ce cas d'utilisation.