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

PowerShell调用Invoke-SqlCmd查询结果被截断,MaxCharLength参数无效如何解决?

问题根因

你遇到的截断问题核心出在Format-Table命令上:

  • Format-Table属于PowerShell的格式化展示类命令,设计目标是给控制台输出易读的内容,默认会对超过展示宽度的字符串自动截断、末尾添加省略号。哪怕你后续给Out-File加了-Width参数,此时Format-Table输出的内容本身已经被截断,后续步骤无法恢复被截断的内容。
  • Export-Csv没有问题是因为它直接读取原始对象的属性值,不会经过格式化截断逻辑。

可行解决方法

方法1(最推荐,无多余冗余内容)

不要用任何Format-*类命令做导出中间步骤,直接提取你需要的列的原始值导出即可,修改后的命令如下:

Invoke-Sqlcmd $createScript -ServerInstance $serverInstace -Database $dbName -MaxCharLength 10000 | Select-Object -ExpandProperty '--ObjectGrants' | Out-File C:\Users\GlueTornado\Desktop\test5.txt -Encoding UTF8

这个方法输出的文本就是你SQL拼接的原始内容,没有多余的表头、空格等冗余信息。

方法2(保留表格格式输出)

如果你确实需要保留表格样式的输出,需要在Format-Table步骤就添加-Wrap参数禁止截断,同时配合-Width参数,修改后的命令如下:

Invoke-Sqlcmd $createScript -ServerInstance $serverInstace -Database $dbName -MaxCharLength 10000 | Format-Table -AutoSize -Wrap | Out-File C:\Users\GlueTornado\Desktop\test5.txt -Width 10000 -Encoding UTF8

额外注意事项

  • 你设置的-MaxCharLength 10000参数是正确的,它保证了Invoke-SqlCmd从SQL Server查询时不会提前截断长字符串,默认值为4000,符合你的场景需求。
  • 建议给Out-File指定编码参数,避免输出的文本出现乱码,常用编码可选UTF8、Default(系统默认编码)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 10:54:03