3

sqlcmd.exeを呼び出してリモートSQLサーバーに対してSQLスクリプトを実行するPowerShellスクリプトを作成しました。PowerShellスクリプトは$LASTEXITCODEをチェックします。$ LASTEXITCODEがゼロ以外の場合、「スクリプトが失敗しました。戻りコードは$LASTEXITCODEです。」をスローします。

このスクリプトは、さまざまなSQLスクリプトを実行するために複数回使用され、展開中に実行される一連のPowerShellスクリプトの一部です。

スクリプトはほとんどの場合正常に実行されますが、戻りコード-1073741502でランダムに失敗します。

これはSQL2008にアップグレードした後にのみ発生し始めており、単一のPowerShellスクリプトを手動で実行するかsqlcmdスクリプトを手動で実行しても再現できません。

これはPowerShellコマンドです。

&'sqlcmd.exe' -S $ databaseServer -r -b -E -i'$ scriptFullPath'

if($ LASTEXITCODE -ne 0){throw"スクリプトが失敗しました。戻りコードは$LASTEXITCODEです。" }

一見ランダムな失敗の性質が多くの苦痛を引き起こしています。エラーがSQL2008なのか、SQLCMDなのか(osql.exeでも同じ動作が得られますが)、または何らかの形でPowerShellに結合されているのかどうかを判断できません。

sqlcmdが実行している実際のSQLは、SQLスクリプトがしばらくの間正常に実行されてから失敗するため、問題とは無関係のようです。

同じ障害が多くの異なるワークステーションとサーバー(Win7、Win2003、およびWin2008)で見られました。

これを追跡する方法についてのガイダンスをいただければ幸いです。

4

2 に答える 2

1

sqlcmdPowershell を使用している場合は、コマンド ラインを使用しないでください。

V2 には非常に優れた組み込みツールがあり、SQL Server とのやり取りがより堅牢になり、エラーをチェックするためにリターン コードのテキストを解析する必要がなくなります。実際には適切なエラー コードが返されます。

Technet の記事はこちらInvoke-SQLCmd

最初にスナップインをロードする必要があることに注意してください。

Add-PSSnapin SqlServerProviderSnapin100
Add-PSSnapin SqlServerCmdletSnapin100
于 2012-01-04T14:06:55.887 に答える
0

根本原因は実際にはここの他の場所で説明されています

終了コード-10737415020xC000014216 進数です (status_dll_init_failed)。Microsoft のKB2701373は、で作成されたリーク ハンドルに対処Console.WriteMicrosoft.powershell.consolehost.dllます。

補足:インターネット上の一部の "修正" では、別の方法を実行してから PowerShell を再起動する必要があります。それでも、PowerShell の実際の再起動は、問題に (一時的に) 対処するものです。

于 2014-10-29T17:02:02.993 に答える