You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerShell中如何将字段数组展开拼接为SQL查询值字符串

PowerShell 批量拼接SQL VALUES部分解决方案

完整实现代码

# 1. 定义字段路径列表,仅需维护此处即可
$fields = @'
common.uuid
user.user_id
user.ldap.user_attributes.displayName
user.email_address
common.owner
common.current_phone_number
common.current_country_name
'@ -split "`n" | ForEach-Object { $_.Trim() } | Where-Object { $_ }

# 2. 嵌套属性取值工具函数
function Get-NestedPropertyValue {
    param(
        $InputObject,
        [string]$PropertyPath
    )
    $current = $InputObject
    foreach ($prop in $PropertyPath -split '\.') {
        $current = $current.$prop
        if ($null -eq $current) { break }
    }
    return $current
}

# 3. 批量格式化字段值,自动处理SQL转义
$valuesItem = $fields | ForEach-Object {
    $val = Get-NestedPropertyValue -InputObject $line -PropertyPath $_
    # 转义值内的单引号,符合SQL语法规范
    $escapedVal = $val?.ToString().Replace("'", "''") ?? ''
    "'$escapedVal'"
} -join ",`n            "

# 4. 拼接生成最终SQL片段
$q = @"
Values 
        (
            $valuesItem
        )
"@

特性说明

  • 仅需维护$fields字段列表,新增删除字段无需修改拼接逻辑,适合上百个字段的场景
  • 支持任意深度的嵌套属性路径取值
  • 自动处理单引号转义,避免SQL语法错误,空值会自动转换为空字符串
  • 自动生成的内容不会出现最后一个字段后多余的逗号,完全符合SQL语法要求

可选扩展:非字符串类型适配

如果存在数值、布尔、日期等不需要包裹单引号的字段,可修改格式化逻辑做类型适配:

$valuesItem = $fields | ForEach-Object {
    $val = Get-NestedPropertyValue -InputObject $line -PropertyPath $_
    # 按需配置不需要单引号的字段列表
    $noQuoteFields = @('user.age', 'common.status', 'common.create_time')
    if ($noQuoteFields -contains $_) {
        $val?.ToString() ?? 'NULL'
    } else {
        $escapedVal = $val?.ToString().Replace("'", "''") ?? ''
        "'$escapedVal'"
    }
} -join ",`n            "

内容的提问来源于stack exchange,提问作者Igor Kuznetsov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 05:24:03