我的SQL Server存储过程如下:
CREATE PROCEDURE ProcessAssessments
@assessmentIds AssessmentList READONLY,
@failed BIT
AS
UPDATE dbo.table
SET IsProcessed = 1,
dbo.ProcessFailed = @failed,
dbo.ProcessDate = GETDATE()
WHERE
dbo.ID IN (SELECT AssessmentId FROM @assessmentIds)
GO
在 Powershell 中:在全局定义下,我正在声明
$connection
和 ArrayList
。$connection = New-Object System.Data.SqlClient.SqlConnection($connectionString)
$connection.Open()
$processedAssessments.Add("1")
$processedAssessments.Add("2")
$processedAssessments.Add("3")
UpdateAssessments($processedAssessments, 0)
在方法内部,我将
ArrayList
转换为 DataTable
,并将其作为参数提供给我的存储过程。function UpdateAssessments([System.Collections.ArrayList] $assessments,[bool] $failed) {
$table = New-Object System.Data.DataTable
$table.Columns.Add("AssessmentId", "System.String") | Out-Null
foreach($assessmentId in $assessments) {
$row = $table.NewRow()
$row.AssessmentId = $assessmentId
$table.Rows.Add($row)
}
$command = New-Object System.Data.SqlClient.SqlCommand
$command.CommandType = [System.Data.CommandType]::StoredProcedure
$command.CommandText = "ProcessKySpecialAssessments"
$command.Connection = $connection
$command.Parameters.Add("@assessmentIds", $table)
$command.Parameters.Add("@failed", $failed)
$Command.ExecuteNonQuery()
}
然而,当我执行此操作时,我会收到以下异常:
使用“0”个参数调用“ExecuteNonQuery”时出现异常:“将nvarchar值'System.Collections.ArrayList'转换为数据类型int失败。
表值参数“@assessmentIds”的数据不符合参数的表类型。
SQL Server错误为:245,状态为:1
我真的不知道我做错了什么。
New-Object SomeType(arg1, ...)
,而是使用New-Object SomeType [-ArgumentList] arg1, ...
- PowerShell cmdlet 和函数的调用类似于 _shell 命令_(没有括号,空格分隔的参数),而不是 _方法_。 - mklement0