#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
опцию.