База данных BCP с точкой в ​​названии

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

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

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


person Kevin    schedule 17.02.2010    source источник


Ответы (1)


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

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

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

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

bcp [D001Test.Restore].dbo.GeneralComments in "<DataFile>" -c -t "|_|" -r "|+~+|"
-k -V80 -a33000 -E -STest
person Bill    schedule 18.02.2010
comment
Я ценю ответ. Я буду тестировать его. Однако у меня все еще есть проблема, когда в имени базы данных есть пробел и точка. Я предварительно реализовал решение для использования временной таблицы с символами подчеркивания, заменяющими точки, но это довольно уродливая концепция. - person Kevin; 18.02.2010
comment
@Kevin Если в имени базы данных есть пробел и точка, вам нужны кавычки. bcp [D001 Test.Restore].dbo.GeneralComments в ‹DataFile› -c -t |_| -р |+~+| -k -V80 -a33000 -E -STest - person Bill; 18.02.2010
comment
@Bill К сожалению, это не работает. Если вы используете кавычки, процесс bcp должен быть запрограммирован на поиск периодов независимо от скобок. Итак: EXEC master..xp_cmdshell 'bcp [D019Restore.Generic Test].dbo.GeneralComments out ‹datafile -q -c -t |_| -р |+~+| -k -V80 -a33000 -E не работает. Если я не смогу найти решение этой проблемы, я почти уверен, что мне придется сделать какое-то хакерское переименование базы данных, чтобы заставить это работать. Также проблема не распространяется как на входящие, так и на исходящие процессы bcp. - person Kevin; 18.02.2010
comment
@Kevin Обратите внимание, что я не включил аргумент -q в список аргументов. Удалите -q из своей команды и повторите попытку. Без -q у меня работает. - person Bill; 18.02.2010
comment
странный. Я попробовал это без аргумента -q и без кавычек и только что получил сообщение об ошибке в выходном файле. Я попробую еще раз. Я забыл упомянуть, и это может быть кикер, это должно быть успешным на Sql 2000, 2005 и 2008. - person Kevin; 19.02.2010
comment
@Kevin Удалите только аргумент -q, но не трогайте кавычки. Я попробовал bcp [D001 Test.Restore].dbo.GeneralComments в ‹DataFile› -c -t |_| -р |+~+| -k -V80 -a33000 -E -STTest на SQL Server 2005, и это работает. - person Bill; 19.02.2010
comment
@ Билл, я ценю твою помощь в этом. Похоже, вы правы, это работает на '05 и '08, но, к сожалению, в SQL 2000 должно быть по-другому. Я пробовал почти все комбинации, и точка по-прежнему читается как разделитель контекста, даже внутри скобки. Я получаю: Не удается открыть базу данных, запрошенную при входе в систему «Тест D001». Ошибка входа. Это со скобками и кавычками, без -q. Спасибо за вашу помощь в этом! - person Kevin; 19.02.2010
comment
@Kevin Вы пытались использовать bcp.exe, установленный с SQL Server 2005 (C:\Program Files\Microsoft SQL Server\90\Tools\Binn\bcp.exe, версия файла: 2005.90.4035.0) для экспорта/импорта данных из/ в SQL Server 2000? Попробуйте аргумент -V80. Не могу попробовать, так как у меня только SQL Server 2005 и 2008. - person Bill; 19.02.2010
comment
@Bill, к сожалению, этот процесс выполняется на серверах клиентов, поэтому у меня действительно нет возможности установить более новую версию bcp в их системе. Основное использование этой функции — позволить им сделать резервную копию базы данных SQL 2008 и восстановить ее на SQL 2000 (или 2005). - person Kevin; 19.02.2010