首页 > 解决方案 > 使用 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()

我承认糟糕的代码,欢迎任何关于代码组合的建议。

标签: sqlpowershellodbc

解决方案


您可以使用 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 提供程序不做批量复制

https://docs.microsoft.com/en-us/sql/relational-databases/native-client-odbc-bulk-copy-operations/performing-bulk-copy-operations-odbc?view=sql-server-ver15


推荐阅读