2016-08-02 1 views
0

Прежде всего, прежде чем все кричат ​​на меня - я исправляю ошибку в устаревшем коде, и переписывание с карты на данный момент - мне нужно попытаться найти исправление используя команду xp_cmdshell.Команда xp_cmdshell не выполняет последнюю команду при запуске как задание

У меня есть proc, который выполняется через запланированное задание. В proc полно TSQL, как показано ниже, чтобы сбрасывать данные в файл журнала.

SELECT *  
INTO Temp 
FROM MyView 

SET @cmd1 = 'bcp "SELECT * FROM [myDatabase].dbo.Temp" queryout "C:\temp.txt" -T -c -t" "' 
SET @cmd2= 'type "C:\temp.txt" >> "C:\output.txt"' 
EXEC master..xp_cmdshell @cmd1 
EXEC master..xp_cmdshell @cmd2 

DROP TABLE Temp 

Проблема в том, что последняя из этих команд в proc не работает. Я вижу результат в файле text.txt, но не в файле output.txt. Все предыдущие работы отлично, хотя и отлично работает, когда я запускаю это самостоятельно.

Может ли кто-нибудь предложить, почему это может произойти или предложить альтернативный способ достижения этого?

Благодаря

ответ

0

Я думаю, что BCP, как внешний процесс работает асинхр. Таким образом, может быть, ваш файл еще не написан в тот момент, когда вы пытаетесь скопировать его содержимое.

  • Предложение 1: Включить подходящее время ожидания
  • Предложение 2: Позвоните в первой команде во второй раз с именем файла измененных целевой
  • Предложение 3: Используйте copy вместо type

You может создать файл c\temp.txt с привет мир в нем. Попробуйте type в один файл перед BCP и введите его в другой файл после BCP.

+0

Это я просто упрощаю код - исправлено –

+0

@LawrencePhillips Хорошо, это была просто глупая идея ... См. Мое обновление ... – Shnugo

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