Bulk Insert Correctement Cité de Fichier CSV dans SQL Server
Je suis en train d'importer correctement cité fichier CSV, signification des données n'est citée que si elle contient une virgule, par exemple:
41, Terminator, Black
42, "Monsters, Inc.", Blue
J'observe que la première ligne des importations correctement, mais la deuxième rangée des erreurs d'une manière qui suggère la cité virgule a été traitée comme un séparateur de champ.
J'ai vu des suggestions comme celle de la
SQL importation en bloc à partir d'un fichier CSV
pour modifier le champ
FIELDTERMINATOR='","'
Cependant, mon fichier CSV uniquement des citations les champs qui en ont besoin, donc, je ne crois pas que cette suggestion serait de travailler.
SQL Server peut IMPORTATION en bloc de déclaration d'importation correctement cité fichier CSV? Comment?
- Ne peut pas être fait. L'Importation de SQL Server méthodes (à la fois de la PCA et d'INSERTION en bloc) ne comprennent pas le citer.
- Voici un poste similaire avec plus d'options stackoverflow.com/questions/782353/...
Vous devez vous connecter pour publier un commentaire.
Malheureusement SQL Server interprète le prix de la virgule comme séparateur. Cela s'applique à la fois de la PCA et d'insertion en bloc .
De http://msdn.microsoft.com/en-us/library/ms191485%28v=sql.100%29.aspx
Il y a une autre solution pour cela.
Considérer les guillemets dans le cadre de la délimiteur de champs, en éditant le fichier fmt.
Vous pouvez vérifier cela pour plus d'informations:
http://blogs.msdn.com/b/sqlserverfaq/archive/2010/02/04/how-to-remove-unwanted-quotation-marks-while-importing-a-data-file.aspx
Un extrait du lien ci-dessus:
La seule façon de supprimer les guillemets serait de modifier les séparateurs de colonnes spécifié lors de l'opération d'importation. Le seul inconvénient, c'est que si vous examinez les données à insérer, vous allez très vite comprendre que les séparateurs de colonnes sont différentes pour chaque colonne (Délimiteurs mis en évidence ci-dessus).
Ainsi, pour spécifier différents séparateurs de colonnes pour chaque colonne, vous devez utiliser un format de fichier si vous prévoyez d'utiliser l'instruction Bulk Insert ou de la PCA. Si vous générez un fichier de format pour le tableau ci-dessus, la structure, il serait comme suit:
Modifier le format de fichier pour représenter le bon séparateurs de colonnes pour chaque colonne. Le nouveau format de fichier à utiliser ressemblera à ceci:
"field"",""","second_field"
, qui représente le double de la citant le champ tout entier et double cotation (""
) des guillemets à l'intérieur d'un champ. Si vous savez utiliser","
comme un séparateur entre le champ 1 et 2, vous obtenez les 3 champs, même si tu voulais seulement 2 champs. Suis-je tort?Je sais que c'est un vieux sujet, mais cette fonctionnalité a été mis en œuvre depuis SQL Server 2017. Le paramètre que vous cherchez est FIELDQUOTE= par défaut '"'. En voir plus sur https://docs.microsoft.com/en-us/sql/t-sql/statements/bulk-insert-transact-sql?view=sql-server-2017
Assurez-vous que vous avez activé TextQualified option et il faut le
"
.J'ai eu ce même problème, et je ne voulais pas avoir à aller à la SSIS route, donc j'ai trouvé un script PowerShell qui est facile à exécuter et traite le cas des citations avec la virgule dans le domaine particulier:
Code Source et DLL pour le Script PowerShell: https://github.com/billgraziano/CsvDataReader
Voici un blog qui explique l'utilisation:
http://www.sqlteam.com/article/fast-csv-import-in-powershell-to-sql-server
Vous pouvez également regarder à l'aide de la fonction OpenRowSet avec le fichier texte CSV fournisseur de données.
Cela devrait être possible avec n'importe quelle version de SQL Server >= 2005, même si vous devez activer la fonctionnalité.
http://social.msdn.microsoft.com/forums/en-US/sqldataaccess/thread/5869d247-f0a0-4224-80b3-ff2e414be402
J'ai eu le même problème, avec les données que seulement de temps en temps les guillemets du texte.
Ma solution est de laisser passer le gros de la CHARGE d'importer les guillemets, puis exécutez un remplacement sur les données importées.
Par exemple:
bulk insert CodePoint_tbl
à partir de "F:\Data\Map\CodePointOpen\Data\CSV\ab.csv"
avec (FIRSTROW = 1, FIELDTERMINATOR = ',', rowterminator il='\n');
mise à jour CodePoint_tbl
définir le code Postal = remplacer(code Postal,'"',")
où charindex('"',code Postal) > 0
Pour le rendre moins pénible à écrire le REMPLACER script, il suffit de copier et coller ce que vous avez besoin à partir des résultats de quelque chose comme ceci:
J'ai passé une demi-journée sur ce problème. Il est préférable d'importer à l'aide de SQL Server Import & Export des données de l'assistant. Il y a un paramètre dans l'assistant qui permet de résoudre ce problème. Détaillée des captures d'écran ici: https://www.mssqltips.com/sqlservertip/1316/strip-double-quotes-from-an-import-file-in-integration-services-ssis/ Grâce
Par CSV spécification de format, je ne pense pas que cela importe si les données sont correctement cité ou pas, tant qu'il est conforme à la spécification. Excessive citations devraient être traitées par l'analyseur, si elle est correctement mise en œuvre.
FIELDTERMINATOR
doit être délimité par des virgules etROWTERMINATOR
est en fin de ligne - cela dénote un fichier CSV standard. Avez-vous essayez d'importer vos données avec ces paramètres?