如何使 Microsoft BCP 导出空字符串而不是 NUL 字符?

Posted

技术标签:

【中文标题】如何使 Microsoft BCP 导出空字符串而不是 NUL 字符?【英文标题】:How to make Microsoft BCP export empty string instead of a NUL char? 【发布时间】:2012-09-17 06:39:28 【问题描述】:

我一直在努力让这个 bcp 工具以特定的方式工作。 -c 开关应该使用字符导出,但由于某种原因,Notepad++ 中显示了一个奇怪的字符,例如它是 UNICODE 或其他格式。

我想将数据库中的空字符串作为空字符串导出到文本文件中。你是怎么做到的?

【问题讨论】:

类似问题Why does bcp output null when the column contains an empty string and empty string when the column is null?. 【参考方案1】:

好吧,在浏览了网络之后,这就是我发现的。想把它放在 SO 中,以便更多人可以访问它。

http://www.techtalkz.com/microsoft-sql-server/147106-how-export-empty-strings-via-bcp.html

但是当我运行 bcp 时,空字符串被写入文本文件 使用 ASCII“NUL”字符 (0x0)。相反,我希望该领域是 填充空白 (0x20)。

解决方案:

在文本文件中,当您批量处理时,空字符串被解释为 NULL 在数据中。 NUL 字符被解释为空字符串,所以 有一致性。但是,如果您要出口,这并没有多大帮助 数据到另一个系统....

只需将NULLIF 包裹起来,该字段在数据库中可能为空,并使其捕获'' 并替换为NULL。这将被转换为 ^^values^^^^more values^^and more^^ 所以你会得到带有空格而不是 NUL 字符的双分隔符。

例如:

...
NULLIF(pri.InstanceName, '') as PerformanceInstanceName,
...

希望这对某人有所帮助。

【讨论】:

***.com/a/46441273/1498669有一个开关 @Bernhard 那是哪个开关?对于出口【参考方案2】:

只是一个后续......

上面的NULLIF 解决方案在 Microsoft SQL 中运行良好,但对于几乎适用于任何数据库的更标准化的解决方案,您应该尝试COALESCE

语法非常相似:

COALESCE(pri.InstanceName, '') as PerformanceInstanceName

【讨论】:

实际上,COALESCE 与本例所需的相反。我们需要识别空值并替换为 ''' 这就是我的想法,但是当我从 coalesce 更改为 nullif 时,它们的 null 输出被一个空字符串替换

以上是关于如何使 Microsoft BCP 导出空字符串而不是 NUL 字符?的主要内容,如果未能解决你的问题,请参考以下文章

bcp:错误 = [Microsoft][SQL Server Native Client 10.0]字符串数据,右截断

bcp:错误= [Microsoft] [SQL Server Native Client 10.0]字符串数据,右截断

让 bcp.exe 转义终止符

将数据批量加载到使用 BCP 从 SQL Server 导出的 Snowflake 时出现 UTF-8 错误

BCP 数据的导入和导出

BCP用法