为什么BCP输出空当列包含空字符串和空字符串当列为空?(Why does bcp output nu

2019-09-02 07:19发布

这使我感到非常奇怪行为,我花了一段时间检查我的代码中的错误,我发现这个之前

“从数据库表或视图文件进行拷贝。如果你指定一个现有的文件,该文件被覆盖。当提取数据,请注意bcp实用工具代表了一个空字符串作为空和空字符串为空字符串。 “ (从http://msdn.microsoft.com/en-us/library/ms162802.aspx )

显然,这让我解决我的问题,但有谁能够想到的或没有任何人知道一个原因是这种情况?

Answer 1:

它已经一段时间了,但我敢肯定,这是一个向后兼容/遗留回来到SQL Server 6.5

SQL Server 6.5中无法存储空字符串:总有一个空间。 这改变了与SQL 7

所以, '' -> NULL' ' -> ''是从一个古老的历史观点是正确的。



Answer 2:

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查询条件结构,以空字符串更改为空。 反过来,BCP输出产生的空为空! 谢谢你的协助。 埃里克



Answer 3:

这涉及到对BCP“默认值”部分:

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

例如,如果在一个数据文件中的空场,该列的默认值,而不是加载。

你必须考虑回天来自其他怪异系统导入纯文本文件。 BCP翻译''为“未定义”(=丢失的数据),并在数据库中设置一个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

下面限定符指定大容量导入操作期间在数据文件的空字段保留其空值,而不是继承一个缺省值(如果有的话)的表列。

然后,你有你的ASCII为0x0在文件/数据库。



文章来源: Why does bcp output null when the column contains an empty string and empty string when the column is null?