如何使 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]字符串数据,右截断