概要
SQLServerManagementStudion (以下 SSMS) と BCP のそれぞれで、ファイルへ NULL と空文字を出力した場合、出力結果が異なります。データ登録時も、両者で NULL と空文字の扱いが異なることで、SSMS で出力した内容を BCP で登録したり、BCP で「上位200行の編集」で開いたテーブルに直接コピペで反映した場合に予期せぬ値として登録されてしまうことがあります。
詳細
ファイルへの出力時
表の中はそれぞれの値の出力結果になります。
【対象】 | 【NULL】 | 【空文字(スペース0)】 | 【空文字(スペース1)】 |
---|---|---|---|
SSMS | NULL | 空文字(スペース0) | 空文字(スペース1) |
BCP | 空文字(スペース0) | 空文字(スペース1) | 空文字(スペース1) |
ファイルからの登録時
表の中はそれぞれの値の登録結果になります。
【対象】 | 【NULL】 | 【空文字(スペース0)】 | 【空文字(スペース1)】 |
---|---|---|---|
SSMS | NULL | 空文字(スペース0) | 空文字(スペース1) |
BCP | 'NULL' | NULL | 空文字(スペース1) |
結論
- SQLServerManagementStudioで出力したファイルをBCPで取り込まない。
- BCPで出力したファイルをSQLServerManagementStudioで取り込まない。
補足
Oracle(SI Object Browser)
SI Object Browser は、BCP の入出力結果と考え方が同じのようです。ですので、Oracle <--> SQLServer 間でちょこっとデータ移行をやる場合は、SI Object Browser <--> BCP でのやり取りがよいみたいです。
編集後記
今回、初投稿です。書きっぷり含めてアドバイスがあれば、ぜひお願いします。