この XLS ファイルを取得します
次に、この XLS ファイルを CSV として保存し、テキスト エディターで開きます。これは私が見るものです:
Col1,Col2,Col3,Col4,Col5,Col6,Col7
1,ABC,"AB""C","D,E",F,03,"3,2"
列 C の二重引用符は として保存されAB""C
、列の値は引用符で囲まれ、データ内の二重引用符は 2 つの二重引用符に置き換えられ、引用符がデータ内で発生し、データを終了していないことを示しています。列の値。また、列 G の値3,2
が引用符で囲まれていることもわかります。これにより、新しい列を示すのではなく、データ内にコンマがあることが明確になります。ここまでは順調ですね。
すべての列の値が引用符で囲まれていないことに少し驚いていますが、コンマドや dbl の引用符文字などの特殊文字がデータに存在する場合にのみ EXCEL が列区切り文字を指定すると仮定すると、これでも妥当なように思えます。
ここで、SQL Server を使用して csv ファイルをインポートしようとしています。テキスト修飾子文字として二重引用符文字を指定していることに注意してください。
そして、列区切り文字としてのコマンド char。ただし、SSIS は列 3 を誤ってインポートすることに注意してください。たとえば、2 つの連続する二重引用符文字が単一の二重引用符文字として変換されません。
Excel と SSIS をうまく使いこなすにはどうすればよいですか?
一般に、データ内で発生する可能性が低い列区切り文字を使用することで問題を回避できますが、これは実際の解決策ではありません。
これからファイルを変更すると、
Col1,Col2,Col3,Col4,Col5,Col6,Col7
1,ABC,"AB""C","D,E",F,03,"3,2"
...これに:
Col1,Col2,Col3,Col4,Col5,Col6,Col7
1,ABC,"AB"C","D,E",F,03,"3,2"
つまり、列 C の値で 2 つの連続する引用符を削除すると、データが適切に読み込まれますが、これは少し混乱します。まず、SSIS は、B と C の間の二重引用符がその列の値を終了していないことをどのように判断するのでしょうか? 次の文字がコンマ列区切り文字でも行区切り文字(CRLF)でもないからでしょうか? そして、なぜ Excel はこのようにエクスポートするのでしょうか?
ウィキペディアによると、CSV ファイルには次の 2 つの特徴があります。
改行 (CRLF)、二重引用符、およびコンマを含むフィールドは、二重引用符で囲む必要があります。例えば:
「aaa」、「b CRLF bb」、「ccc」CRLF zzz、yyy、xxx
二重引用符を使用してフィールドを囲む場合、フィールド内にある二重引用符は、その前に別の二重引用符を付けてエスケープする必要があります。例えば:
"aaa"、"b"、"bb"、"ccc"
ただし、SSIS はインポート時にそれを好まないようです。データの列区切り記号、テキスト区切り記号、または行区切り記号として使用される特殊文字を含む可能性のある CSV ファイルを Excel で作成するにはどうすればよいですか? ウィキペディアで指定されているアプローチを使用して機能しない理由はありません。これは、古いMS DTSパッケージが行っていたと私が思っていたことです...
アップデート:
メモ帳を使用する場合は、入力ファイルを次のように変更します
Col1,Col2,Col3,Col4,Col5,Col6,Col7,Col8
"1","ABC","AB""C","D,E","F","03","3,2","AB""C"
Excelは問題なく読み取ります
しかし、SSISは戻ります
The preview sample contains embedded text qualifiers ("). The flat file parser does not support embedding text qualifiers in data. Parsing columns that contain data with text qualifiers will fail at run time.