2016-08-02 3 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 파일에서는 볼 수 없습니다. 위의 모든 작업을 잘하지만 그것은 그것을 잘 실행할 때 자신의 그것에 작동합니다.

왜 이런 일이 일어날 수 있는지 제안하거나이를 달성하기위한 대안을 제안 할 수 있습니까?

덕분에 외부 프로세스로 BCP는 비동기를 실행하도록

답변

0

나는 생각한다. 따라서 파일을 복사하려고하는 순간에도 파일이 아직 작성되지 않았을 수 있습니다.

  • 제안 1 : 포함 적절한 대기 시간
  • 제안 2 : 변경된 대상 파일 이름으로 두 번째로 첫 번째 명령에 전화
  • 제안 3 : copy보다는 type

당신에게 안녕에 파일을 만들고 안녕하세요. typeBCP 앞에 하나의 파일에 넣고 BCP 뒤에 다른 파일에 입력하십시오.

+0

코드를 단순화 한 것입니다. –

+0

@LawrencePhillips 좋습니다. 이것은 바보 같은 생각이었습니다 ... 내 업데이트보기 ... – Shnugo