Удаляем Temp, если она осталась от предыдущего запуска
try { $cmd = $Connection.CreateCommand() $cmd.CommandText = "DROP TABLE [Temp]" $cmd.ExecuteNonQuery() | Out-Null $cmd.Dispose() } catch { }
Создаём список колонок для Temp
$Columns = @()
foreach ($Column in $FilterTable.Columns) {
$ColumnName = $Column.ColumnName
# Purchasing Document и Item оставляем с теми же именами,
# остальные колонки также создаём автоматически
$Columns += "[$ColumnName] TEXT(255)"
}
$cmd = $Connection.CreateCommand()
$cmd.CommandText = @" CREATE TABLE [Temp] ( $($Columns -join ",`n ") ) "@
$cmd.ExecuteNonQuery() | Out-Null $cmd.Dispose()
Формируем INSERT
$ColumnNames = ( $FilterTable.Columns | ForEach-Object { "[(_.ColumnName)]" } ) -join ", "
$ParameterMarks = ( $FilterTable.Columns | ForEach-Object { "?" } ) -join ", "
Загружаем данные в Temp
foreach ($__row in $FilterTable.Rows) {
$cmd = $Connection.CreateCommand()
$cmd.CommandText = @"
INSERT INTO [Temp] ( $ColumnNames ) VALUES ( $ParameterMarks ) "@
foreach ($Column in $FilterTable.Columns) {
$Parameter = $cmd.Parameters.Add(
"@p",
[System.Data.OleDb.OleDbType]::VarWChar,
255
)
$Value = $__row[$Column.ColumnName]
if ($Value -eq $null -or
$Value -eq [System.DBNull]::Value) {
$Parameter.Value = [System.DBNull]::Value
}
else {
$Parameter.Value = [string]$Value
}
}
$cmd.ExecuteNonQuery() | Out-Null
$cmd.Dispose()