这让我感到非常奇怪的行为,我花了一段时间检查代码中的bug,然后发现了以下内容
out从数据库表或视图复制到文件。如果指定现有文件,该文件将被覆盖。提取数据时,请注意bcp实用程序将空字符串表示为null,将空字符串表示为空字符串。(来自http://msdn.microsoft.com/en-us/library/ms162802.aspx)
显然,这让我解决了我的问题,但有谁能想到或者知道为什么会出现这种情况?
发布于 2009-11-02 01:42:00
这已经有一段时间了,但我确信这是对SQL Server 6.5的向后兼容/遗留
SQL Server 6.5无法存储空字符串:始终有一个空格。这种情况在SQL 7中发生了变化
因此,从古代历史的角度来看,'' -> NULL和' ' -> ''是正确的。
发布于 2017-02-25 02:59:46
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代替empty。
我在这里找到了最佳解决方案:
https://bytes.com/topic/sql-server/answers/143738-bcp-inserting-blank-space-empty-string
我找到了一个解决办法,在
查询中使用Case结构将空字符串更改为null。BCP反过来将结果null输出为空!谢谢你的帮助。Eric
发布于 2017-09-27 14:52:07
这与BCP的“默认值”部分相关:
例如,如果数据文件中有null字段,则改为加载该列的默认值。
您必须回想一下从其他奇怪的系统导入纯文本文件的日子。BCP将''转换为“未定义”(=缺失数据),并在数据库中设置空值(=缺失数据)。对于其他系统,NULL from数据库的另一种方式必须是''。
要从数据库中获取“真实”数据,请使用-k开关:
以下限定符指定数据文件中的空字段在大容量导入操作期间保留其NULL值,而不是继承表列的默认值(如果有)。
然后您的文件/数据库中就有了ASCII 0x0。
https://stackoverflow.com/questions/1644731
复制相似问题