2010-02-17 2 views
2

У меня возникли проблемы с использованием процесса SQL BCP для загрузки моих таблиц с данными. Я называю это из .NET-приложения, поэтому я выполняю исполняемый файл xp_cmdshell для запуска команды bcp. Вот что одна из этих команд выглядит следующим образом:База данных BCP с периодом по имени

EXEC master..xp_cmdshell 'bcp "[D001Test.Restore].[dbo].[GeneralComments]" in "<DataFile>" -q -c -t "|_|" -r "|+~+|" -k -V80 -a33000 -E -STest' 

Когда имя базы данных Я ввожу в (в данном случае D001Test.Restore) имеет «» в имени команда bcp завершается с ошибкой. Есть ли способ обойти это? Я пробовал как с, так и без скобок. Возможно, мне придется импортировать данные в новую базу данных и переименовать их в нужное имя после его завершения.

ответ

2

Вам не нужен аргумент -q и кавычки. В документации говорится следующее о д аргумента:

Используйте эту опцию, чтобы указать базу данных, владельца, таблицу или имя представления, содержит пробел или один котировку знак. Включите всю таблицу трёх частей: или в виде кавычек ("").

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

Попробуйте это:

bcp [D001Test.Restore].dbo.GeneralComments in "<DataFile>" -c -t "|_|" -r "|+~+|" 
-k -V80 -a33000 -E -STest 
+0

Я ценю ответ. Я проверю это. Однако у меня все еще есть проблема, когда имя базы данных имеет пробел и период в имени. Я предварительно использовал решение для использования временной таблицы с подчеркиваниями, заменяющими периоды, но это довольно уродливая концепция. – Kevin

+1

@Kevin Если у вас есть пробел и период в имени базы данных, вам нужны кавычки. bcp "[D001 Test.Restore] .dbo.GeneralComments" in "" -c -t "| _ |" -r "| + ~ + |" -k -V80 -a33000 -E -STest – Bill

+0

@Bill К сожалению, это не сработает. Если вы используете кавычки, процесс bcp должен быть запрограммирован для поиска периодов, независимо от скобок. Итак, это: EXEC master..xp_cmdshell 'bcp "[D019Restore.Generic Test] .dbo.GeneralComments" out " Kevin

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