【发布时间】:2023-03-22 13:08:02
【问题描述】:
我一直在努力让这个 bcp 工具以特定的方式工作。 -c 开关应该使用字符导出,但由于某种原因,Notepad++ 中显示了一个奇怪的字符,例如它是 UNICODE 或其他格式。
我想将数据库中的空字符串作为空字符串导出到文本文件中。你是怎么做到的?
【问题讨论】:
我一直在努力让这个 bcp 工具以特定的方式工作。 -c 开关应该使用字符导出,但由于某种原因,Notepad++ 中显示了一个奇怪的字符,例如它是 UNICODE 或其他格式。
我想将数据库中的空字符串作为空字符串导出到文本文件中。你是怎么做到的?
【问题讨论】:
好吧,在浏览了网络之后,这就是我发现的。想把它放在 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,
...
希望这对某人有所帮助。
【讨论】:
只是一个后续......
上面的NULLIF 解决方案在 Microsoft SQL 中运行良好,但对于几乎适用于任何数据库的更标准化的解决方案,您应该尝试COALESCE。
语法非常相似:
COALESCE(pri.InstanceName, '') as PerformanceInstanceName
【讨论】:
coalesce 更改为 nullif 时,它们的 null 输出被一个空字符串替换