PowerShell访问Oracle、SQL Server数据库,导出到CSV文件

PowerShell访问Oracle、SQL Server数据库,导出到CSV文件

# query oracle
# connect info
# sql
# parameters
# scalar result
# return an array of ordered HashTable or a scalar value
function Oracle-Query {
    param ($conn_info, [String] $SQL, [HashTable] $parameters, [Bool] $scalar)
    $USER = $conn_info.USER
    $PASSWD = $conn_info.PASSWD
    $SERVER = $conn_info.SERVER
    $DB = $conn_info.DB
    $CONNECTION_STR = "User Id=$USER;Password=$PASSWD;Data Source=$SERVER/$DB"
    $connection = New-Object System.Data.OracleClient.OracleConnection($CONNECTION_STR)
    $connection.Open()
    $ora_cmd = $connection.CreateCommand()
    $ora_cmd.CommandText = $SQL
    ForEach($key in $parameters.Keys) {
        $param = New-Object System.Data.OracleClient.OracleParameter($key, '')
        $param.Value = $parameters[$key]
        $ora_cmd.Parameters.Add($param) | Out-Null
    }
    If($scalar) {
        $val = $ora_cmd.ExecuteScalar()
        $connection.Close()
        Return $val
    } Else {
        $reader = $ora_cmd.ExecuteReader()
        $columns = @()
        For($i = 0; $i -lt $reader.FieldCount; $i++) {
            $columns += $reader.GetName($i)
        }
        $data = @()
        While($reader.Read()) {
            $row = [ordered]@{}
            $columns | % { $index = 0 } {
                If($reader.IsDBNull($index)) {
                    $row.Add($_, '')
                } Else {
                    $row.Add($_, $reader.GetValue($index))
                }
                $index += 1
            }
            $data += $row
        }
        $connection.Close()
        Return $data
    }
}

# query sql server
# connect info
# sql
# parameters
# scalar result
# return an array of ordered HashTable or a scalar value
function SQLServer-Query {
    param ($conn_info, [String] $SQL, [HashTable] $parameters=$null, [Bool] $scalar=$False)
    $USER = $conn_info.USER
    $PASSWD = $conn_info.PASSWD
    $SERVER = $conn_info.SERVER
    $DB = $conn_info.DB
    $conn_str = "User Id=$USER;Password=$PASSWD;Database=$DB;Data Source=$SERVER"
    $sql_conn = New-Object System.Data.SqlClient.SqlConnection($conn_str)
    $sql_conn.Open()
    $command = $sql_conn.CreateCommand()
    $command.CommandText = $SQL
    ForEach($key in $parameters.Keys) {
        $parameter = New-Object System.Data.SqlClient.SqlParameter($key, '')
        $parameter.Value = $parameters[$key]
        $command.Parameters.Add($parameter) | Out-Null
    }
    If($scalar) {
        $val = $command.ExecuteScalar()
        $sql_conn.Close()
        Return $val
    } Else {
        $reader = $command.ExecuteReader()
        $columns = @()
        For($i = 0; $i -lt $reader.FieldCount; $i++) {
            $columns += $reader.GetName($i)
        }
        $data = @()
        While($reader.Read()) {
            $row = [ordered]@{}
            $columns | % { $index = 0 } {
                If($reader.IsDBNull($index)) {
                    $row.Add($_, '')
                } Else {
                    $row.Add($_, $reader.GetValue($index))
                }
                $index += 1
            }
            $data += $row
        }
        $sql_conn.Close()
        Return $data
    }
}

# export HashTable into csv file
function HashTable-ToCsv {
    param([Array] $data, [String] $filename, [String] $date_format_str='dd/MM/yyyy')
    if ($data.Count -le 0) {
        Exit
    }
    if(FileExist "$filename") {
        Clear-Content -Path "$filename"
    }
    $first_row = $data[0]
    $first_row.Keys | % {
        $header += """$_"""
        $header += ','
    }
    $header = $header -replace ',$', ''
    Add-Content -Value "$header" -Path "$filename"
    $data | % {
        $values = ''
        $_.Values | %{
            $val = $_
            if (($val.GetType()) -eq [System.DateTime]) {
                $val = $val.ToString($date_format_str)
            }
            $values += """$val"""
            $values += ','
        }
        $values = $values -replace ',$', ''
        $values = $values -replace '\n', ' '
        $values = $values -replace '\r', ' '
        $values = $values -replace '\r\n', ' '
        Add-Content -Value "$values" -Path "$filename"
    }
}
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要在 SQL Server导出数据库表,你可以使用 SQL Server Management Studio (SSMS) 或者使用 SQL Server 命令行工具 (sqlcmd)。以下是两种常用的方法: 方法一:使用 SQL Server Management Studio (SSMS) 1. 打开 SSMS,并连接到要导出表的数据库服务器。 2. 在“对象资源管理器”中,展开数据库,找到要导出的表。 3. 右键点击表,选择“任务” -> “生成脚本”。 4. 在“生成脚本向导”中,选择要导出的表以及生成脚本的选项。 5. 指定导出脚本的目标(例如,新查询编辑器窗口、文件或剪贴板)。 6. 点击“下一步”并完成向导,生成脚本并导出表。 方法二:使用 SQL Server 命令行工具 (sqlcmd) 1. 打开命令提示符或 PowerShell。 2. 使用以下命令连接到 SQL Server 数据库: ``` sqlcmd -S <服务器名称> -d <数据库名称> -U <用户名> -P <密码> ``` 替换 `<服务器名称>`、`<数据库名称>`、`<用户名>` 和 `<密码>` 为相应的值。 3. 在命令行中输入以下命令来导出表: ``` bcp <数据库名称>.<架构名称>.<表名称> out <输出文件路径> -S <服务器名称> -d <数据库名称> -U <用户名> -P <密码> -n ``` 替换 `<数据库名称>`、`<架构名称>`、`<表名称>`、`<输出文件路径>`、`<服务器名称>`、`<用户名>` 和 `<密码>` 为相应的值。 4. 执行命令后,表数据将导出到指定的输出文件路径。 这些方法可以帮助你在 SQL Server导出数据库表。记得根据实际情况替换对应的参数值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值