我正在努力让这个 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