2008.01.10

SQL-ServerのBCPでの空文字列とNullの違いについて

SQL-Serverの BCPユーティリティ を使ってCSVデータを出力時に、
値が Null と ""(空文字列)では、出力結果が異なります。

例えば、以下の2つのBCPを実行すると

① bcp "SELECT 'A' Koumoku1, '' Koumoku2", 'C' Koumoku3 queryout {出力パス} -t, /c /S {サーバー名} /U{ID} /P{パスワード}
② bcp "SELECT 'A' Koumoku1, Null Koumoku2", 'C' Koumoku3 queryout {出力パス} -t, /c /S {サーバー名} /U{ID} /P{パスワード}

出力結果は、以下の様になります。
①、②の違いは、2項目目に空白が入るか入らないの違いになります。


A, ,C


A,,C

小さな違いですが、他システムと連携する場合には、
連携先のシステムによって空白を無くして欲しいと言う事があります。

先日、担当したシステムでは、DB上の値では、空白でパディングされており、
出力時に、空白を取り除いて出力するという仕様でした。

通常で有れば、RTRIM関数を使用すれば良いのですが、
今回の連携先システムのCSVレイアウト仕様では、
値が無い場合は、空白を無くして出力するものでした。
上記の理由から、""(空文字列)を Null に変換する必要が有り、
以下の様に、NULLIF関数を使用して回避しました。

NULLIF(RTRIM([項目名]),SPACE(0))


空文字列とNullの違い と 外部システムとの連携については、
注意が必要で有ると改めて感じました。

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

photo
yatsuda