2012-06-12 39 views
1

全部在这篇文章中xp_cmdshell Query Length Too Large我设法获得了一个问题,我遇到了使用xp_cmdshell的查询大小限制。我写这么长的查询的原因是尝试解决另一个问题,bcp似乎将空字符串(来自包含具有空字符串的字段的表)转换为某种编码字符('NUL'或'r'),或者其他的东西)。这影响了我可以使用我的导出数据。出口查询我是BCP导出自动将空字符串转换为NUL

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文件,然后重新编码 - 是什么将我的'奇怪的人物'转换回它应该是的最佳方式,一个空字符串?

感谢您的时间。

回答

1

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

+0

那么什么是我的奇怪字符转换为空字符串的最佳方式。那是让bcp写一个空字符串作为空字符串?通过在输出查询中使用'coalesce'或'IsNull'来创建 – MoonKnight

+1

? – paul