SQLサーバーテーブルに直接インポートするCSVファイルがあります。 CSVファイルでは、各列がカンマで区切られています。しかし、私の問題は、「アドレス」列があり、この列のデータにカンマが含まれていることです。つまり、住所列のデータの一部が他の列に送られ、SQLサーバーにインポートされます。
私は何をすべきか?
列にカンマがある場合、その列は一重引用符または二重引用符で囲む必要があります。次に、その列内に単一引用符または二重引用符がある場合は、その前にエスケープチャーターが必要です。通常は\
CSVの形式の例
ID-住所-名前 1、 "Some Address、Some Street、10452"、 'David O \' Brian '
この問題の解決策は非常に簡単です。最初に選択=>フラットファイルソース=>ファイルを参照=>デフォルトで「テキスト修飾子」に移動し、デフォルトではどれも( ")のようにここに二重引用符を記述して、ウィザードの指示に従います。
手順は次のとおりです。最初に=>フラットファイルソース=>ファイルを参照=>テキスト修飾子(書き込みのみ ")を選択し、ウィザードの指示に従います。
幸運を
CSV以外の形式を使用するか、フィールド区切り文字やテキスト区切り文字として他の文字を使用することをお勧めします。データで使用されていない文字を探してみてください。 |、#、^、または@。単一行のフォーマットは次のようになります
|foo|,|bar|,|baz, qux|
正常に動作するパーサーは、「baz」と「qux」を2つの列として解釈してはなりません。
または、問題を修正する独自のインポートブードゥーを作成することもできます。後で、これを見つけるかもしれません Groovyスケルトン 便利です(ただし、どの言語に堪能かはわかりません)
Excelを含むほとんどのシステムでは、列データを単一引用符で囲むことができます...
col1、col2、col3 'test1'、 'my test2、withコンマ'、test3
別の方法としては、TABを区切り文字として使用するMacintoshバージョンのCSVを使用する方法があります。
データのコンマの問題を解決する最良の、最も迅速で最も簡単な方法は、Windowsのリストセパレーター設定をコンマ以外(パイプなど)に設定した後、Excelを使用してコンマ区切りファイルを保存することです。これにより、パイプ(またはその他)で区切られたファイルが生成され、インポートできます。これは ここ で説明されています。
引用を追加しても役に立たないと思います。コンテンツのカンマをスペースなどの別のマークに置き換えるのが最善の方法です。
replace(COLUMN,',',' ') as COLUMN
両側の選択列にスピーチマークを追加します。列が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