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
相关产品推荐
相关产品推荐

