2016-06-11 19 views
2

パイプで区切られた二重引用符付きのフラットファイルをインポートしようとしていますが、埋め込み二重引用符のエスケープ文字としてバックスラッシュが使用されています。 this-SSIS 2012 - 埋め込みのバックスラッシュを含むフラットファイルをインポートする

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

SQL 2012のインポートウィザードが埋め込まれた二重引用符として二重二重引用符を認識し、それはこのバックスラッシュダブルにチョークのようなので、会社おもちゃ「R」の行会社はがでてくるでしょう見積もり。データプロバイダの応答は「他の誰もフォーマットに問題がありません」ということです。これは私が逃したオプション設定なのでしょうか?

答えて

0

は、あなたが簡単なBULK INSERTを使用してみましたが、一括ステージング表を作成します

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

....などのBULK INSERTのものを使用して最初のSQLサーバーにステージングテーブルにデータをアップロードしますインサート

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

SQL Serverのテーブルでは、次のupdate文を使用して、テキスト修飾子の二重引用符とエスケープ文字を取り除きます。

データTidyのクエリ

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

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

BULK INSERTを結果セットには、引用フィールド、引用されたデータなどなどに付き約いじくるの代わりに表示されるセパレータとうるさいことができますformat fileそれは、@ M.Aliの回答に従って、BULK INSERTを送る前に、それをきれいにするためにpowershellのビットを通してファイルを実行していますか?もちろんこれは個人的な好みですが、それを行う方法は複数あります。例えば

:汚れたCSVファイルをインポートするに

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

(セルフプロモーションの警告...)長いブログ記事:https://www.rednotebluenote.com/2015/12/public-holiday-csv-wrangling/

関連する問題