BCP 导出会自动将空字符串转换为 NUL

本文关键字:字符串 转换 NUL BCP | 更新日期: 2023-09-27 18:36:59

All,在这篇文章中 xp_cmdshell查询长度太大 我设法解决了我在使用xp_cmdshell查询大小限制时遇到的问题。我编写这么长的查询的原因是试图解决另一个问题,即 bcp 似乎将空字符串(来自包含具有空字符串的字段的表)转换为一些编码字符("NUL"或"r"或其他东西)。这会影响我可以使用导出的数据做什么。我的导出查询是

string strBcp = String.Format(
    "declare @sql varchar(8000) " +
    "select @sql = 'bcp '"SELECT * FROM [{0}]..[ivwTmpDrgDataView];'" ' +" +
    "'queryout '"{1}''DRGData.txt'" -c -t -T -S ' + @@servername " +
    "exec master..xp_cmdshell @sql;",
    strDatabase,
    strDataDir);

这工作正常,但在导出的文件数据库中转换值

NULL -> Empty String (Which is fine!)
Empty String -> Some strange character

我可以使用 C# 读取.txt文件,然后重新编码 - 将我的"奇怪字符"转换回应有的空字符串的最佳方法是什么?

谢谢你的时间。

BCP 导出会自动将空字符串转换为 NUL

这是

设计使然,如果bcp将空字符串和空字符串转换为相同的输出(假设为空字符串),那么以后将无法消除它们的歧义。

BCP 将 NULL 转换为空字符串,因此请使用 NULL 而不是空字符串。

更多描述

bcp 实用工具