环境:SQL Server 2000
有时候我们想用 bcp 命令导出一个字段的值为什么也没有的空值。
我们一般会直接插入一个空值,比如:
bcp "SELECT a,'',c FROM kmjxc_pro..TempTable" queryout c:\aaa.txt -c -T
或者将值为固定值 xx 的某列替换为空值,比如:
bcp "SELECT a,replace(b,'xx',''),c FROM kmjxc_pro..TempTable" queryout c:\aaa.txt -c -T
但当我们打开导出的 aaa.txt 文件时,会发现空值处被转换成了 0x00。
原因如下:提取数据时, bcp 实用工具将空字符串表示为 null,而将 null 字符串表示为空字符串。(0x00 代表 null)
解决办法:最简单的就是直接写上 null,比如:
bcp "SELECT a,null,c FROM kmjxc_pro..TempTable" queryout c:\aaa.txt -c -T
而在查询分析器中,它对空字符串和 null 不做任何处理而直接输出。所以要注意 bcp 和查询分析器中对待空字符串和 null 的差别。
另外,bcp 中如果要保留 null 字符串,则在命令后加-k 参数即可。
参考资料: