2017-05-16 4 views
0

すべてのnvarchar列にデータのインポートウィザードを経由してSQL ServerにCSV:インポート引用エスケープ私は、このようなのようなCSVデータのテーブルを持っている

    a | b | c | d | f  
1:    12  Dave Larry $1234.0 FALSE 
2:    324.0  Bob Gray $24.012 TRUE 
3:    2000  John Stan $204.0 
4:    9000 Stace Jill  - FALSE 
5:    850.0 Till    $30 TRUE 

フィールドなど、ユーザーのコメントなどは、カンマが含まれるので、これらは、一重引用符または二重引用符でエスケープします。 Excelはこれらを開き、インポートする前にデータをクレンジングまたは操作するために使用できます。

移行の観点から私にとって最も簡単なことは、まずデータをSQL Serverにvarcharsとして取得してから、SQLを使用してデータをターゲットの宛先形式に操作することでした。

私は、次の問題に実行でした:問題を引き起こす可能性がありますCSVをインポートしようとし

1)。 SQL Server Management Studioのインポートには厳密に書式設定されたCSVが必要です。つまり、コメント欄やテキストの通貨として書式設定された数値は、インポートに失敗する可能性があります。

2)CSVをXLSとして保存すると、SQL Server Management Studioはフォーマットされているかどうかにかかわらず、データをどのように解釈するかを "スマート"にしようとしているようです。場合によっては、データをnvarcharまたはvarcharに変換することはできません。インポートユーティリティではデータが数値であるとみなされるためです。タブ区切りは、特にユーザーのコメントのようなものではうまく動作しなくなる可能性があります。

すべての列をvarcharまたはnvarcharにして、CSVをSQL Serverにインポートするエラーフリーの方法は何ですか?

答えて

0

解決策の1つは、データ - >テキスト - 列を使用し、区切り文字を付けてから区切り文字を選択しないことでした。ただし、Excelでは、一度に1つの列のみを実行できます。しかし、このXLSは、すべてのnvarcharsと同様にSQL Serverに読み込まれます。

さらにこのソリューションを改訂すると、次のマクロを作成してPERSONAL.XLSBに保存し、将来のすべてのワークシートで使用できるようにすることができます。キーの組み合わせにこのマクロをマッピングすることにより、あなたはセルを選択することができ、その後、マクロが列を選択して、あなたのための列関数にテキストを実行します:

Sub ColumnToNVarChar() 
' 
' ColumnToNVarChar Macro 
' Convert a column in Excel to a format that SQL Server Management Studio's import process will interpret as nvarchar. 
' 
' Keyboard Shortcut: Ctrl+d 
' 
    ActiveCell.EntireColumn.Select 
    Selection.TextToColumns Destination:=ActiveCell.EntireColumn, DataType:=xlDelimited, _ 
     TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _ 
     Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _ 
     :=Array(1, 2), TrailingMinusNumbers:=True 
End Sub 

あなたはその後、XLSファイルとして保存SQL Server Management Studioの「データのインポート」プロセスでは、すべての列がnvarcharとして処理されます。通常はnvarchar(255)です。

関連する問題