SQL サーバー テーブルに直接インポートする CSV ファイルがあります。CSV ファイルでは、各列はカンマで区切られています。しかし、私の問題は、「住所」という列があり、この列のデータにコンマが含まれていることです。そのため、アドレス列のデータの一部が他の列に送られ、SQL サーバーにインポートされます。
私は何をすべきか?
SQL サーバー テーブルに直接インポートする CSV ファイルがあります。CSV ファイルでは、各列はカンマで区切られています。しかし、私の問題は、「住所」という列があり、この列のデータにコンマが含まれていることです。そのため、アドレス列のデータの一部が他の列に送られ、SQL サーバーにインポートされます。
私は何をすべきか?
この問題の解決策は非常に簡単です。最初に選択=>フラットファイルソース=>ファイルを参照=>次に、デフォルトで「テキスト修飾子」に移動し、(")のような二重引用符をここに書き込み、ウィザードの指示に従います。
手順は次のとおりです-最初に選択=>フラットファイルソース=>ファイルを参照=>テキスト修飾子(書き込みのみ ")を選択し、ウィザードの指示に従います。
幸運を
列にカンマがある場合は、その列を一重引用符または二重引用符で囲む必要があります。次に、その列内に一重引用符または二重引用符がある場合、その前にエスケープ チャーター (通常は \) を付ける必要があります。
CSVのフォーマット例
ID - アドレス - 名前 1、「サム・アドレス、サム・ストリート、10452」、「デビッド・オブライアン」
CSV以外の形式を使用するか、フィールド区切り文字やテキスト区切り文字として他の文字を使用することをお勧めします。データで使用されていない文字(|、#、^、@など)を探してみてください。単一行の形式は次のようになります
|foo|,|bar|,|baz, qux|
正常に動作するパーサーは、「baz」と「qux」を2つの列として解釈してはなりません。
または、問題を修正する独自のインポートブードゥーを作成することもできます。後で、このGroovyスケルトンが役立つかもしれません(ただし、どの言語に堪能かはわかりません)
データ内のコンマの問題を解決するための最善かつ最も迅速で簡単な方法は、Windows のリスト セパレーター設定をコンマ以外 (パイプなど) に設定した後、Excel を使用してコンマ区切りファイルを保存することです。これにより、パイプ(または何でも)で区切られたファイルが生成され、インポートできます。これについては、こちらで説明しています。
Excel を含むほとんどのシステムでは、列データを一重引用符で囲むことができます...
col1,col2,col3 'test1','my test2, コンマ付き',test3
もう 1 つの方法は、区切り記号として TAB を使用する Macintosh バージョンの CSV を使用することです。
両側の選択列にスピーチマークを追加すると機能します。列が TEXT の場合、これを文字列に変換するには、列を NVARCVHAR(MAX) としてキャストする必要もあります。
SQLCMD -S DB-SERVER -E -Q "set nocount on; set ansi_warnings off; SELECT '""' + cast ([Column1] as nvarchar(max)) + '""' As TextHere, [Column2] As NormalColumn FROM [Database].[dbo].[Table]" /o output.tmp /s "," -W
引用符を追加しても解決しないと思います。私が提案する最善の方法は、コンテンツ内のコンマをスペースなどの他のマークに置き換えることです。
replace(COLUMN,',',' ') as COLUMN