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

使用PowerShell导出SQL Server存储过程定义至文件时内容错误

问题解决:PowerShell批量导出SQL Server存储过程到单独文件

你的问题出在循环逻辑上:你遍历的是$data.name(所有存储过程名称的集合),每次循环里$content = $data.content取的是所有存储过程的定义,自然每个文件都会写入全部内容。

修改后的代码如下:

$query = "select  o.name, cast(m.definition as varchar(max)) as content
from sys.objects as o
inner join sys.sql_modules as m on o.object_id = m.object_id
where o.type = 'p' and o.schema_id = 7"

$data = Invoke-Sqlcmd -ConnectionString "Data Source=server;Initial Catalog=db; Integrated Security=True;" -Query $query
$folderloc = "\output\folder"

# 遍历查询结果的每一行对象,而不是只遍历名称
foreach ($proc in $data) {
    # 用Join-Path拼接路径,避免手动拼接的分隔符问题
    $fullname = Join-Path -Path $folderloc -ChildPath "$($proc.name).sql"
    # 直接取当前行的content属性
    $content = $proc.content
    # 用Set-Content一步完成创建文件并写入内容(如果文件已存在会覆盖)
    Set-Content -Path $fullname -Value $content
}

关键修改点:

  • 循环对象从$data.name改为$data,这样每次循环的$proc是包含当前存储过程名称和定义的完整对象
  • 使用Join-Path拼接文件路径,比手动拼接更可靠,避免出现类似\output\foldername.sql这种路径错误
  • 用Set-Content替代New-Item + Add-Content,简化代码逻辑,一步完成文件创建和内容写入

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 03:45:54