Ошибка — не удается открыть данные файла хоста BCP при выполнении команды BCP

#sql-server-2008 #file #bcp

#sql-server-2008 #файл #bcp

Вопрос:

Я пытаюсь скопировать данные из файла ‘.dat’ в таблицу в sql server. Я получаю эту ошибку при выполнении следующих команд:

 declare @cmd varchar(100)
set @cmd = 'bcp dBFCLogging.dbo.TempBFCLogs in '   '''D:WorkAreadata.dat'''   ' -c -T'
exec xp_cmdshell @cmd
  

Точное сообщение об ошибке:

 SQLState = S1000, NativeError = 0
Error = [Microsoft][SQL Server Native Client 10.0]Unable to open BCP host data-file
NULL
  

Я выполнил команду печати и проверил переменную cmd, и это выглядит нормально.

 bcp dBFCLogging.dbo.TempBFCLogs in 'D:WorkAreadata.dat' -c -T
  

Я запускаю эту команду на сервере БД, поэтому у меня есть этот файл по правильному пути на этом сервере БД. Я читал, что могут быть проблемы с разрешениями. Итак, я разрешил пользователю «Everyone» иметь доступ на чтение / выполнение к этой структуре папок, а также к файлу, но он по-прежнему выдает эту ошибку во время выполнения.
Пожалуйста, помогите!

Ответ №1:

Изменить «D:WorkAreadata.dat » чтобы "D:\WorkArea\data.dat"

Комментарии:

1. ммм, в чем разница?

2. «» обрабатывается как escape-символы, в то время как «\» отрицает эффект и обрабатывается как одиночная косая черта (/).

3. @karank — SO удаляет вторую косую черту в ответе при его отображении. Я просто изменил форматирование, чтобы теперь оно отображалось правильно.

4. Спасибо @MichaelGardner за это

Ответ №2:

Если вы заключаете имя файла в кавычки, они должны быть в двойных, а не в одинарных кавычках. Ваша команда должна быть:

 declare @cmd varchar(100);
set @cmd = 'bcp dBFCLogging.dbo.TempBFCLogs in "D:WorkAreadata.dat" -c -T';
exec xp_cmdshell @cmd;
  

Могут возникнуть дополнительные проблемы в зависимости от способа форматирования данных в файле данных. В некоторых случаях вам необходимо описать это в файле формата и ссылаться на этот файл формата в вашей команде BCP, используя -f опцию.