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

时间:2012-06-12 15:26:30

标签: c# encoding bcp xp-cmdshell

全部,在这篇文章xp_cmdshell Query Length Too Large中,我设法使用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文件然后重新编码 - 将我的'奇怪角色'转换回应该是什么的最佳方法是什么,空字符串?

感谢您的时间。

2 个答案:

答案 0 :(得分:1)

这是设计的,如果bcp将null和空字符串转换为相同的输出(假设是一个空字符串),那么以后就没有办法消除它们的歧义。

答案 1 :(得分:1)

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

More Description

bcp utility