0

我正在通過電源外殼下面SQLCMDSQLCMD不返回錯誤

$dump = sqlcmd -S $server -Q $sqlCommand -t $queryTimeout -b -h -1 -W 

我試圖寫輸出到屏幕

$message = "Error while executing sql {0}, Error details {1}" -f "$sqlCommand","$dump" 
Write-Warning $message 

$dump是空

+1

您是否期待$ dump包含錯誤? $ dump只會包含發送到輸出流的數據。如果它來自錯誤流,您需要重定向'$ dump = sqlcmd -S $ server -Q $ sqlCommand -t $ queryTimeout -b -h -1 -W 2>&1' ...也許 – Matt

+0

SQLCMD是一個奇怪的生物。我會通過在SQL中運行查詢來確認,並檢查是否確實得到結果,然後弄亂開關。我傾向於運行完整的腳本,因此我使用'-i'並提供一個文件名,但是我只能使用&(SQLCMD)-s localhost -x -i $ file'來處理它。嘗試刪除所有交換機,並且如果您獲得結果,請將其添加回去。 –

+0

我希望轉儲包含SQL文件的輸出,就好像我在SQL管理工作室中運行它 –

回答

1

我不熟悉與sqlcmd.exe,但從您的期望的描述,我認爲sqlcmd發送信息的錯誤流。這是一種看似奇怪但常見的做法,因此也是一種常見現象。

問題在於變量$dump只會收集發送到輸出流的信息。你可以做的是將錯誤流重定向到使用重定向器輸出流。欲瞭解更多信息,你可以看看about_redirection

因此,使用下面將實現這一目標:

$dump = sqlcmd -S $server -Q $sqlCommand -t $queryTimeout -b -h -1 -W 2>&1 

鏈接的文檔描述2>&1作爲

發送錯誤(2),併成功輸出(1)到成功的輸出流。

現在$dump應該包含你在找什麼。請小心,因爲它可能包含比您預期更多的信息。