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

如何用PowerShell提取SQL文件中的Database.TableName并生成去重CSV

解决SQL文件表名提取并生成CSV的问题

原命令问题分析

你之前的Select-String命令正则表达式存在两个关键问题:

  • 正则逻辑错误:from|join|update|into\s(\w{100})会把关键字拆分开匹配(比如单独匹配from,或者join,或者update,或者into\s(\w{100})),无法正确匹配每个关键字后跟的表名
  • 匹配规则太局限:\w{100}只能匹配100个连续单词字符,无法匹配database.table这种带点的格式,也没考虑关键字后可能有多个空格、换行,以及可选的schema前缀

正确的PowerShell脚本

以下脚本可实现需求:提取指定SQL文件中FROM/JOIN/UPDATE/INTO后的database.table(自动移除中间的schema前缀),去重后生成包含FileName和Database.TableName的CSV:

# 设置目标SQL文件路径
$sqlPath = "\\shared\path\*.sql"
# 设置输出CSV路径
$outputCsv = ".\ExtractedTables.csv"

# 正则表达式:匹配不区分大小写的关键字,跳过可选的schema,捕获database.table
$pattern = '(?i)\b(from|join|update|into)\s+(?:[\w]+\.)?([\w]+\.[\w]+)\b'

# 遍历所有SQL文件,提取匹配项并处理
$results = Get-ChildItem -Path $sqlPath | ForEach-Object {
    $fileName = $_.Name
    # 读取文件内容,匹配所有符合规则的表名
    $matches = Select-String -Path $_.FullName -Pattern $pattern -AllMatches | ForEach-Object { $_.Matches }
    # 提取捕获组的表名,去重
    $uniqueTables = $matches | ForEach-Object { $_.Groups[2].Value } | Select-Object -Unique
    # 生成每个表名对应的条目
    $uniqueTables | ForEach-Object {
        [PSCustomObject]@{
            FileName = $fileName
            "Database.TableName" = $_
        }
    }
}

# 导出到CSV
$results | Export-Csv -Path $outputCsv -NoTypeInformation -Encoding UTF8

关键说明

  • 正则表达式(?i)\b(from|join|update|into)\s+(?:[\w]+\.)?([\w]+\.[\w]+)\b:
    • (?i):不区分大小写,兼容FROM/from/From等写法
    • \b:单词边界,避免匹配包含这些关键字的其他单词(比如FROMX)
    • \s+:匹配一个或多个空白字符(包括空格、换行、制表符)
    • (?:[\w]+\.)?:可选的schema前缀(非捕获组,不会被提取),处理类似schema.database.table的格式,自动保留database.table
    • ([\w]+\.[\w]+):精准捕获database.table格式的表名
  • Select-Object -Unique:对每个文件内的重复表名去重
  • Export-Csv:生成标准CSV文件,包含指定的两列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 13:45:47