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 回答