列に空の文字列が含まれているときにbcpがnullを出力し、列がnullのときに空の文字列を出力するのはなぜですか?

StackOverflow https://stackoverflow.com/questions/1644731

  •  10-07-2019
  •  | 
  •  

質問

これは本当に奇妙な振る舞いとして私を驚かせ、これを見つける前にコードのバグをチェックするのにしばらく費やしました

データベーステーブルまたはビューからファイルへの

" outコピー。既存のファイルを指定すると、ファイルは上書きされます。データを抽出するとき、bcpユーティリティは空の文字列をnullとして、null文字列を空の文字列として表すことに注意してください。 ( http://msdn.microsoft.com/en-us/library/ms162802から.aspx

明らかに、これで問題を解決できましたが、これが事実である理由を誰かが考えたり、知っている人はいますか?

役に立ちましたか?

解決

しばらく経ちましたが、SQL Server 6.5への後方互換性/レガシーであると確信しています

SQL Server 6.5は空の文字列を保存できませんでした。常に1つのスペースがありました。これはSQL 7で変更されました

だから ''-> NULL および ''-> '' は古代史の観点から正しいです。

他のヒント

SELECT ARTICULO as Articulo, 
        case when rtrim(CCOLOR) = '' then null else rtrim(CCOLOR) end as Color, 
        case when rtrim(TALLE) = '' then null else rtrim(TALLE) end as Talle,
from precios

空の代わりに null を送信します。

ここで最適なソリューションを見つけます:

https:// bytes .com / topic / sql-server / answers / 143738-bcp-inserting-blank-space-empty-string

  

SQLクエリでケース構造を使用して回避策を見つけました   空の文字列をnullに変更します。 BCPは結果を出力します   空としてnull!   ご協力ありがとうございます。   エリック

これは、「デフォルト値」に関連しています。 BCPのセクション:

https://docs.microsoft.com/en-us/sql/relational-databases/import-export/keep-nulls-or-use-default-values-during-bulk -import-sql-server

  

たとえば、データファイルにnullフィールドがある場合、代わりに列のデフォルト値がロードされます。

他の奇妙なシステムからプレーンテキストファイルをインポートする時代を思い出す必要があります。 BCPは、 '' を" not defined"(=データなし)として変換し、データベースにNULL(=データなし)を設定します。データベースからのNULLを回避する他の方法は、他のシステムの '' でなければなりません。

データベースから「実際の」データを取得するには、 -k スイッチを使用します。

https://docs.microsoft.com/en-us/sql/relational-databases/import-export/keep-nulls-or-use-default-values-during -bulk-import-sql-server#keep_nulls

  

次の修飾子は、テーブル列のデフォルト値(ある場合)を継承するのではなく、バルクインポート操作中にデータファイルの空のフィールドがnull値を保持することを指定します。

次に、ファイル/データベースにASCII 0x0があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top