PowerShellからテキストファイルに保存されたクエリを実行しようとしています。私はそれをするために次のように使います。 powershellからSQLスクリプトファイルを実行します。
Invoke-Expression 'sqlcmd -d TestDB -U $user -P $pw -i "E:\SQLQuery1.sql"'
.sql
ファイルからクエリを実行するときにエラーまたは例外が発生した場合
注:私はthis websiteで利用可能invoke-sqlcmd
PowerShellからテキストファイルに保存されたクエリを実行しようとしています。私はそれをするために次のように使います。 powershellからSQLスクリプトファイルを実行します。
Invoke-Expression 'sqlcmd -d TestDB -U $user -P $pw -i "E:\SQLQuery1.sql"'
.sql
ファイルからクエリを実行するときにエラーまたは例外が発生した場合
注:私はthis websiteで利用可能invoke-sqlcmd
使用invoke-sqlquery
モジュールを使用することはできません。
私はPowerShellスクリプトにそれを得ることができる方法.sqlファイルを実行する際に、いくつかのエラーまたは例外が発生した場合、質問
に答えるために?どのように私は、スクリプトの出力を得ることができますか?」
Invoke-Expression
実行式の出力を返します。しかし、それだけで(私はこの方法を使用していないとして、私は、テストしていません)STDOUT
、ないSTDERR
を取り込むことができますので、あなたは、実際のエラーメッセージを取得しない場合があります
をヘルプから:。
起動-Expressionコマンドレットは、評価されるか、コマンドとして指定された文字列を実行し、式の結果またはコマンド
を返します。
既に入手可能なPowerShellメソッドを使用する方が良いでしょう - Invoke-SQLCmd
は、SQL Server 2008(またはそれ以降)のコンポーネント/ツール(SSMSなど)をインストールしている場合にインストールされます。 SQL Server 2012をお持ちの場合は、非常に簡単です:import-module sqlps
。 2008年には、スナップイン、add-pssnapin SqlServerCmdletSnapin
を追加する必要があります。 sqlcmd.exe
があるので、PowerShellコンポーネントが既に存在するはずです。他のすべてが失敗した場合
、System.Data.SQLClient
ルートに行く:両方これとInvoke-SQLCmd
で
$Conn=New-Object System.Data.SQLClient.SQLConnection "Server=YOURSERVER;Database=TestDB;User Id=$user;password=$pw";
$Conn.Open();
$DataCmd = New-Object System.Data.SqlClient.SqlCommand;
$MyQuery = get-content "e:\SQLQuery1.sql";
$DataCmd.CommandText = $MyQuery;
$DataCmd.Connection = $Conn;
$DAadapter = New-Object System.Data.SqlClient.SqlDataAdapter;
$DAadapter.SelectCommand = $DataCmd;
$DTable = New-Object System.Data.DataTable;
$DAadapter.Fill($DTable)|Out-Null;
$Conn.Close();
$Conn.Dispose();
$DTable;
を、あなたがピックアップし、発生したエラーを処理するためにtry/catch
を使用することができます。
** GO **あなたの声明:https://stackoverflow.com/a/25681013/1747983 – Tilo
this question's answersに示されているように、Powershellに組み込まれていて、意外にもInvoke-Sqlcmd
というSQLCMDを呼び出す方法があります。
それは個々のファイルのために使用することは非常に簡単です:
Invoke-sqlcmd -ServerInstance $server -Database $db -InputFile $filename
またはグループ:
$listOfFiles | % { Invoke-sqlcmd -ServerInstance $server -Database $db -InputFile $_ }
なぜあなたは '起動-Expression'を使用していますか?通常のようにsqlcmdを呼び出してください。 'PS> sqlcmd.exe -d TestDB -U $ user -P $ pw -I E:\ SQLQuery.sql1'です。 「エラーまたは例外」が表示されている場合は、このエラーまたは例外の全文を投稿してください。 – latkin
また、invoke-sqlcmdを使用できない理由についても説明します。おそらく回避策があります。 – noam
+1 'invoke-sqlcmd'についての説明が必要です。IIRC、 'sqlcmd'がインストールされているシステムを持っているなら、' invoke-sqlcmd'(SQL Server 2008以降のツールである限り) – alroc