首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么bcp在列包含空字符串时输出null,当列为null时输出空字符串?

为什么bcp在列包含空字符串时输出null,当列为null时输出空字符串?
EN

Stack Overflow用户
提问于 2009-10-29 23:56:55
回答 3查看 12K关注 0票数 9

这让我感到非常奇怪的行为,我花了一段时间检查代码中的bug,然后发现了以下内容

out从数据库表或视图复制到文件。如果指定现有文件,该文件将被覆盖。提取数据时,请注意bcp实用程序将空字符串表示为null,将空字符串表示为空字符串。(来自http://msdn.microsoft.com/en-us/library/ms162802.aspx)

显然,这让我解决了我的问题,但有谁能想到或者知道为什么会出现这种情况?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-11-02 01:42:00

这已经有一段时间了,但我确信这是对SQL Server 6.5的向后兼容/遗留

SQL Server 6.5无法存储空字符串:始终有一个空格。这种情况在SQL 7中发生了变化

因此,从古代历史的角度来看,'' -> NULL' ' -> ''是正确的。

票数 9
EN

Stack Overflow用户

发布于 2017-02-25 02:59:46

代码语言:javascript
运行
复制
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

票数 1
EN

Stack Overflow用户

发布于 2017-09-27 14:52:07

这与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将''转换为“未定义”(=缺失数据),并在数据库中设置空值(=缺失数据)。对于其他系统,NULL from数据库的另一种方式必须是''

要从数据库中获取“真实”数据,请使用-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。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1644731

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档