Моя хранимая процедура 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()
}
Однако, когда я выполняю это, я получаю следующееисключение:
Исключение вызывает "ExecuteNonQuery" с аргументом (ами) "0": "Преобразование не удалось при преобразовании значения nvarchar 'System.Collections.ArrayList' в тип данных int.
Данныедля табличного параметра "@assessmentIds" не соответствует типу таблицы параметра.
Ошибка SQL Server: 245, состояние: 1
Я действительно не уверен, чтоЯ делаю неправильно.