2013-08-08 7 views
7

PowerShellからテキストファイルに保存されたクエリを実行しようとしています。私はそれをするために次のように使います。 powershellからSQLスクリプトファイルを実行します。

Invoke-Expression 'sqlcmd -d TestDB -U $user -P $pw -i "E:\SQLQuery1.sql"' 

.sqlファイルからクエリを実行するときにエラーまたは例外が発生した場合

、どのように私は私のPowerShellスクリプトでそれをキャプチャすることができますか?スクリプト出力を取得するにはどうすればよいですか?

注:私はthis websiteで利用可能invoke-sqlcmd

+5

なぜあなたは '起動-Expression'を使用していますか?通常のようにsqlcmdを呼び出してください。 'PS> sqlcmd.exe -d TestDB -U $ user -P $ pw -I E:\ SQLQuery.sql1'です。 「エラーまたは例外」が表示されている場合は、このエラーまたは例外の全文を投稿してください。 – latkin

+2

また、invoke-sqlcmdを使用できない理由についても説明します。おそらく回避策があります。 – noam

+0

+1 'invoke-sqlcmd'についての説明が必要です。IIRC、 'sqlcmd'がインストールされているシステムを持っているなら、' invoke-sqlcmd'(SQL Server 2008以降のツールである限り) – alroc

答えて

1

使用invoke-sqlqueryモジュールを使用することはできません。

9

私は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を使用することができます。

+0

** GO **あなたの声明:https://stackoverflow.com/a/25681013/1747983 – Tilo

7

this question's answersに示されているように、Powershellに組み込まれていて、意外にもInvoke-SqlcmdというSQLCMDを呼び出す方法があります。

それは個々のファイルのために使用することは非常に簡単です:

Invoke-sqlcmd -ServerInstance $server -Database $db -InputFile $filename 

またはグループ:

$listOfFiles | % { Invoke-sqlcmd -ServerInstance $server -Database $db -InputFile $_ } 
関連する問題