Insertion en bloc du qualificatif de text fmt

J'ai une tâche BULK INSERT qui prend des données d'un csv et les imports dans une table. Le seul problème est que l'une des colonnes peut contenir une virgule, donc l'import ne fonctionne pas comme prévu.

J'ai essayé de résoudre ce problème en créant un file de format (fmt) dont le contenu est détaillé ci-dessous:

9.0 6 1 SQLCHAR 0 50 "," 1 "Identifier" Latin1_General_CI_AS 2 SQLCHAR 0 50 "," 2 "Name" Latin1_General_CI_AS 3 SQLCHAR 0 50 "," 3 "Date of Birth" Latin1_General_CI_AS 4 SQLCHAR 0 50 "," 4 "Admission" Latin1_General_CI_AS 5 SQLCHAR 0 50 "," 5 "Code" Latin1_General_CI_AS 6 SQLCHAR 0 50 "\r\n" 6 "Length" Latin1_General_CI_AS 

La colonne qui me cause de la douleur est la colonne 2 "Nom".

J'ai essayé quelques choses pour identifier la colonne comme étant qualifiée de text et contenant une virgule mais je n'obtiens pas le résultat que je veux.

Si je change à ce qui suit: –

"\"," – Je reçois quelque chose comme ça -" Richardson, Mat

Ce n'est pas correct, j'ai donc essayé ceci, comme suggéré sur d'autres forums / sites: –

 "\",\"" 

Cela ne fonctionne pas du tout et me donne l'erreur

 Cannot obtain the required interface ("IID_IColumnsInfo") from OLE DB provider "BULK" for linked server "(null)".Bulk load: An unexpected end of file was encountered in the data file. 

J'ai essayé quelques autres combinaisons et je n'arrive tout simplement pas à le faire correctement. Toute aide ou conseil serait massivement apprécié.

Pas vraiment répondre à votre question concernant les files de format, mais une solution de travail possible.

Les files de format sont des arcanes incompréhensibles des années 1980 pour moi, l'encart en vrac est ultra grincheux et impitoyable. Par conséquent, j'ai tendance à nettoyer datatables avec quelques lignes de PowerShell à la place. Voici un exemple que j'ai utilisé récemment pour convertir un file CSV en un tube séparé, pour supprimer certaines citations randoms sur la sortie et pour permettre des virgules dans les loggings:

 Import-Csv -Path $dirtyCsv | ConvertTo-CSV -NoType -Delimiter '|' | %{ $_.Replace('"','') } | Out-File $cleanCsv 

Vous avez eu l'idée…

Ceci alors simplement importé:

 BULK INSERT SomeTable FROM 'clean.csv' WITH ( FIRSTROW = 2, FIELDTERMINATOR = '|', ROWTERMINATOR = '\n' ) 

J'espère que cela t'aides.