SSIS 2012 – Importer un file plat avec Backslash Double Citation embeddede

J'essaie d'importer un file plat délimité par des tuyaux, avec un qualificateur de text à double citation, mais le file utilise une barre oblique inverse comme caractère d'échappement pour les guillemets doubles embeddeds. Alors une rangée pour la compagnie Toys "R" Us viendrait comme ça …

accountno|companyname|address1 1234|"Toys \"R\" Us"|"123 Main St." 

L'assistant d'import de SQL 2012 reconnaît un guillemet double-double comme un guillemet double incorporé, mais il s'étouffe sur cette double barre oblique inverse. La réponse du fournisseur de données est "personne d'autre n'a un problème avec le format", donc je me request si c'est juste un paramètre d'option que j'ai manqué?

Avez-vous essayé d'utiliser un simple BULK INSERT , download vos données dans une table de transfert en premier dans le server SQL en utilisant BULK INSERT quelque chose comme ….

Créer une table de transfert

 CREATE TABLE UploadFile_Staging ( accountno INT , companyname VARCHAR (100) , address1 VARCHAR(100) ) GO 

Insert en vrac

 BULK INSERT UploadFile_Staging FROM N'D:\File_Folder\Data.txt' WITH (FIRSTROW = 2 ,FIELDTERMINATOR = '|' ,ROWTERMINATOR = '\n' ) GO 

Une fois que vous avez des données dans la table du server sql, utilisez l'instruction de mise à jour suivante pour vous débarrasser des doubles guillemets du qualificateur de text et des caractères d'échappement.

Data Tidy Query

 UPDATE UploadFile_Staging SET companyname = REPLACE(LEFT(STUFF(companyname,1,1,'') , LEN(companyname)- 2) , '\"', '"') ,address1 = REPLACE(LEFT(STUFF(address1,1,1,'') , LEN(address1)- 2) , '\"', '"') 

Jeu de résultats

 ╔═══════════╦═════════════╦══════════════╗ ║ accountno ║ companyname ║ address1 ║ ╠═══════════╬═════════════╬══════════════╣ ║ 1234 ║ Toys "R" Us ║ 123 Main St. ║ ╚═══════════╩═════════════╩══════════════╝ 

BULK INSERT peut être difficile avec la citation de champ, les séparateurs apparaissant dans datatables citées etc etc. Une alternative à la déblocage avec un file de format est de lancer le file avec un peu de powershell pour le nettoyer avant de l'insert comme @M. La réponse d'Ali. Ceci est juste une preference personnelle bien sûr, il y a plus d'une façon de le faire.

Par exemple:

 Import-Csv -Delimiter '|' -Path $dirtyCsv | #Change the delimiter to suit ConvertTo-CSV -NoType -Delimiter '|' | #Pipe delims help with commas in quoted text ssortingngs %{ $_.Replace('"','') } | #Add other cleanup here Out-File $cleanCsv #Et Volia, one clean file 

Un post de blog plus long (auto promo promo …) sur l'import de files csv sales: https://www.rednotebluenote.com/2015/12/public-holiday-csv-wrangling/