Выполнить BCP с удаленной машины - PullRequest
0 голосов
/ 04 июня 2019

У меня есть один сервер с базой данных sql и studio manager и другой сервер, с которого я хочу выполнить команду bcp. Могу ли я использовать (возможно, файл .bat) для создания файла .txt на том же сервере? Или у кого-нибудь есть другие предложения? Это для человека, который не имеет никаких знаний о BD и хочет выполнить в любое время, поэтому я не использую запланированное задание.

Я попробовал следующее, он не работает на втором сервере, но показывает ожидаемый результат на первом.

DECLARE @SQL VARCHAR(255), @bcpc VARCHAR(8000)
SET @SQL = 'select * from BaseDatos.dbo.tabla'

SET @bcpc = 'bcp "' + @SQL + '" queryout'
SET @bcpc = @bcpc + ' c:\test\archivo.txt -c -t"|" -Usa -P'
EXEC master..xp_cmdshell @bcpc

print @bcpc

Ответы [ 2 ]

0 голосов
/ 05 июня 2019

Команда bcp, которую вы создаете, не включает опцию -S, чтобы указать, с какого SQL Server получать данные. Я считаю, что если он работает на вашем «сервере А», это потому, что BCP должен по умолчанию использовать локальный экземпляр по умолчанию. Однако при попытке выполнить команду BCP на «сервере B» у вас больше не будет того же экземпляра SQL Server по умолчанию (если он вообще есть). Попробуйте добавить опцию -S, чтобы указать имя сервера A в команде BCP.

Imma дважды проверьте значение сервера "по умолчанию", если -S не используется.

Угу ...

-S имя_сервера [\ instance_name] Указывает экземпляр SQL Server, к которому необходимо подключиться. Если сервер не указан, утилита bcp подключается к экземпляру SQL Server по умолчанию на локальном компьютере. Эта опция обязательна , когда команда bcp запускается с удаленного компьютер в сети или локальный именованный экземпляр. Для подключения к экземпляр SQL Server по умолчанию на сервере, укажите только имя_сервера. Чтобы подключиться к именованному экземпляру SQL Server, укажите server_name \ instance_name.

0 голосов
/ 04 июня 2019

Как насчет

EXECUTE (master.xp_cmdshell@bcpc) AT server2

Если вы не получаете результата:

1) Является ли Basedatos.dbo.tabla на сервере 2? Если нет, создайте связанный сервер, чтобы вы могли ссылаться на server1.basedatos.dbo.tabla, чтобы BCP, работающий на сервере 2, мог получать данные с сервера 1

2) Проверьте все разрешения на сервере 2.

...