sql - 使用 powershell 将数据插入到 ODBC 目标
问题描述
我需要将数据表加载到与 powershell 的 ODBC 驱动程序连接。使用 OLEDB 和 SQL 服务器,我们可以使用批量复制和快速插入数据。
ODBC 有这样的可能性吗?
我正在使用 powershell,因为它应该对这类操作有最好的支持,但是我当前的代码没有使用任何 dll。
所以我的代码首先需要创建一个带有两个for循环的插入语句,并在每一行上迭代并将其保存在内存中,然后用1000行构造INSERT INTO,然后重复同样的事情。
我注定要这样吗?
$Datatable = New-Object System.Data.DataTable
$tabledump= $src_cmd.ExecuteReader()
$Datatable.Load($tabledump)
foreach ($item in $Datatable.Rows) {
$f +=1
for ($i = 0; $i -lt $item.ItemArray.Length; $i++) {
$items = $item[$i] -replace "'" , "''"
$val +="'"+ $items + "',"
}
$vals += $val
if ($f % 1000 -eq 0 -or $f -eq $row_cnt) {
$values = [system.String]::Join(" ", $vals)
$values = $values.TrimEnd(",")
$cols = [system.String]::Join(",", $columns)
$postgresCommand = "Insert Into $dst_schema.$dst_table ($cols) values $values"
$dest_cmd_.CommandText = $postgresCommand
$dest_cmd_.ExecuteNonQuery()
我承认糟糕的代码,欢迎任何关于代码组合的建议。
解决方案
您可以使用 Get-ODBCDSN 命令检索 ODBC 连接的值并将其与查询一起使用
$conn.ConnectionString= "DSN=$dsn;"
$cmd = new-object System.Data.Odbc.OdbcCommand($query,$conn)
$conn.open()
$cmd.ExecuteNonQuery()
$conn.close()
https://www.andersrodland.com/working-with-odbc-connections-in-powershell/
但是 ODBC 提供程序不做批量复制
推荐阅读
- coq - Coq 错误:无法将“true”与“is_true (0 < a - b - 3)”统一起来
- swift - 旋转整个 AR 会话轴(以与真实世界的 North-West-Up 对齐)
- reactjs - react-google-maps/api DirectionsService 不断地重新渲染自己
- shell - 这个 shell 重定向命令中的“200”是什么?文件描述符?
- python - 在numpy中进入两个不同维度的数组时,点积和乘法矩阵是否相同
- flutter - 将 Flutter Barcode Result 单行转换为列表
- c - 忽略信号的不同方法?
- spring-boot - Spring Boot - 我是否必须使用 Transactional 标记处理和保存数据的方法?
- python - numpy 数组中特定值的新列
- c# - 创建组合框并动态填充项目