2013-07-10 3 views
1

Invoke-Sqlcmd을 사용할 때 SQL 스크립트에서 print ' '을 로그 파일로 라우팅하는 방법을 아는 사람은 누구입니까?SQL 인쇄 출력을 로그 파일로 라우팅하는 방법은 무엇입니까?

sqlcmd -o someoutfile.txt을 사용해 보았지만 덮어 쓰기 때문에 기존 파일에 추가되지 않습니다. SQL 오류가 발생하면 print ' '이 아닌 오류 메시지 만 파일로 전송됩니다. Invoke-Sqlcmd | out-file someoutfile.txt -Append을 사용할 때 Write-Output과 결국 SQL 오류 만 추가되지만 수행 된 SQL 스크립트에는 print ' '이 추가되지 않습니다.

누구에게도 해결책이 있습니까?

+0

예를 들어 메시지를 쓰는 경우에 모든 출력 스트림을 출력 파일로 리디렉션 해 보았습니까? 자세한 정보 표시 또는 디버그 스트림? (Invoke-Sqlcmd *> & 1 | Out-File ...') –

답변

3

Invoke-SqlCmd는 verbose 매개 변수를 사용하여 T-SQL PRINT 문과 RAISERROR를 구현합니다. 자세한 출력을 캡처하려면 먼저 당신은 당신의 호출에서 매개 변수를 포함해야합니다 호출-SQLCMD 즉 호출-SQLCMD -verbose와 다음 두 가지 중 하나를 수행 할 수 있습니다 : 당신이 파워 쉘 V3를 사용하는 경우

당신이 파워 쉘 V2를 사용하는 경우이 파일에 자세한 출력을 리디렉션 할 수 없습니다

invoke-sqlcmd -verbose 4>&1 | outfile someoutfile.txt 

그러나 당신이 파일에 모든 화면 출력을 보낼 시작 사본을 사용할 수 있습니다 : 이상 당신은 자세한 출력을 리디렉션 할 수 있습니다. 이 접근 방식에 하나의 장애가 있습니다. SQL Agent Powershell 작업 단계에서는 작동하지 않습니다. 그러나 powershell.exe를 호출하는 cmdexec 작업 단계에서 작동합니다.

+0

Powershell v2를 사용 중입니다. 자세한 내용은 powershell 스크립트의 쓰기 출력 만 sql 스크립트 print ''를 포함하지 않습니다. v3으로 업그레이드하면 문제가 해결 될 수 있습니다. 고맙습니다. –

0

그리고 한 순간 ...

명령 "호출-SQLCMD는"매개 변수 -SeverityLevel 있습니다. SeverityLevel은 오류 메시지 심각도 수준의 하한을 지정합니다. Invoke-Sqlcmd는 ERRORLEVEL PowerShell로 반환됩니다.

Invoke-Sqlcmd는 심각도가 10 인 정보 메시지의 심각도를보고하지 않습니다!

심각도 수준 10 : 상태 정보 이 정보는 사용자가 입력 한 정보의 실수로 인한 문제를 나타내는 정보 메시지입니다. 심각도 수준 0은 SQL Server에서 표시되지 않습니다.