2012-06-12 2 views
1

Все в этом сообщении xp_cmdshell Query Length Too Large Мне удалось получить исправление проблемы, с которой я столкнулся с пределом размера запроса, используя xp_cmdshell. Причина, по которой я писал такой длинный запрос, заключалась в попытке обойти еще одну проблему, тот факт, что bcp, кажется, преобразует пустые строки (из таблицы, содержащей поля с пустыми строками) в некоторый закодированный символ («NUL» или «r», или что-то). Это приводит к тому, для чего я могу использовать экспортированные данные. Запрос на экспорт у меня естьBCP Export автоматически преобразует пустые строки в 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 

Я мог читать .txt файл с C#, а затем перекодировать - , что является лучший способ конвертировать мой «странный символ» обратно в то, что он должен быть, пустую строку?

Спасибо за ваше время.

ответ

1

Это по дизайну, если bcp преобразует как нулевые, так и пустые строки в один и тот же вывод (допустим, пустую строку), тогда не было бы возможности их повторно устранить.

+0

Так что это лучший способ, чтобы преобразовать мой странный символ пустой строки. То есть, чтобы bcp записывал пустую строку в виде пустой строки? – MoonKnight

+1

с помощью 'coalesce' или' IsNull' в вашем выходном запросе? – paul

Смежные вопросы