0

以下に示すSPを呼び出すpowershellスクリプトがあります

 $sqlTableConnection = New-Object [System.Data.SqlClient.SqlConnection]("Server=1xx.xx.xxx; Database=dbName; Integrated Security= True");

    $sqlTableCmd = New-Object [System.Data.SqlClient.SqlCommand]
    $sqlTableCmd.CommandText = "[System_Control].[usp_Check_system]"
    $sqlTableCmd.Connection = $sqlTableConnection;
    $jobName1 = "MASTER_JOB";
    $sqlTableCmd.Parameters.AddWithValue("@JobName", $jobName1) ;
    $outParameter = new-object System.Data.SqlClient.SqlParameter;
    $outParameter.ParameterName = "@JobSatatus";
    $outParameter.Direction = [System.Data.ParameterDirection]'Output';
    $outParameter.DbType = [System.Data.DbType]'Boolean';
    $sqlTableCmd.Parameters.Add($outParameter) ;
    $sqlTableCmd.Connection = $sqlTableConnection
     $sqlTableConnection.Open();
    $sqlTableCmd.ExecuteNonQuery();
    $truth = $sqlTableCmd.Parameters["@JobSatatus"].Value;
    $sqlTableConnection.Close();
    $truth;

しかし、これを実行していると、エラーが発生します

Exception calling "ExecuteNonQuery" with "0" argument(s): "The variable name '@
JobName' has already been declared. Variable names must be unique within a quer
y batch or stored procedure."
At line:15 char:33
+     $sqlTableCmd.ExecuteNonQuery <<<< ();
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : DotNetMethodException

私はどこで間違いをしていますか?

4

1 に答える 1

1

SqlCommand オブジェクトを再初期化しておらず、 @JobName が既に定義されている場合にのみ、そのエラーが発生するはずです。

スクリプト全体を実行したときではなく、手動で実行したときにこれを取得していると思われます..

または、常に表示されている場合は、このコードを関数に移動した可能性がありますが、元の $sqlTableCmd はメイン コードで初期化されており、これを実行すると別のスコープにありますが、より高い範囲で定義されたものですか?

私が理解しているように、ここにあるこの行は、あなたのために物事を新たに設定する必要があるものです。

$sqlTableCmd = New-Object [System.Data.SqlClient.SqlCommand]

于 2013-05-06T21:01:50.893 に答える