2015-08-05 2 views
1

запросBCP queryout не экономить на локальном

EXEC xp_cmdshell 'bcp "select * from DEV.DBO.visit" queryout "c:\users\visit.txt" -c -T' 

выше работает нормально, и сохраняет выходные на удаленном сервере; то, что я пытаюсь сделать здесь, чтобы сохранить его на моей машине, что я запущен SQL из

Alex

ответ

0

Когда вы запускаете xp_cmdshell, вы буквально выполняете команду на SQL Server: диск C: это жесткий диск SQL Server. Чтобы сохранить вывод на вашем компьютере, на вашем компьютере должен быть общий сетевой ресурс, видимый для SQL Server. После этого вы можете запустить команду:

EXEC xp_cmdshell 'bcp "select * from DEV.DBO.visit" 
    queryout "\\my-computer\my-share\users\visit.txt" -c -T' 

Однако, поскольку команда работает под управлением учетных данных SQL Server, что доля также должна быть доступна для записи учетной записи SQL Server. Скорее всего, нет.

Чем больше вопрос, Почему вы используете bcp на сервере вместо запуска bcp локально?

Откройте командную оболочку, и просто сказать:

bcp "select * from dev.dbo.visit" 
    queryout c:\my-bcp-output-data.txt 
    -S some-sql-server-instance 
    -T 
+0

вопрос .. даже если вы запустите 'bcp' команду, используя командную оболочку, вы входите в базу данных в качестве пользователя и выполнения эти вопросы ... правильные? –

+0

Да, но когда вы запускаете BCP локально, результаты возвращаются локально. (т. е. везде, где выполняется BCP.EXE) –

+0

@ Nick.McDermaid..thanks для пояснения. –

1

У меня была эта проблема в последнее время. Результаты queryout записываются на сервер базы данных. Для этого нужно использовать ftp для передачи полученных файлов с удаленного сервера на локальный компьютер.

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

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