sqlcmd导出.rpt文件列内容被截断,如何完整导出?
解决sqlcmd导出.rpt文件时列内容被截断的问题
核心原因
SSMS的「查询结果→结果到文本」设置仅对SSMS自身的文本输出生效,sqlcmd有独立的参数控制字符列显示长度,所以修改SSMS设置无法解决问题。
解决方案
在sqlcmd命令中添加对应参数控制字符列的最大显示长度,需区分列的类型选择参数:
-y <n>:针对普通字符类型列(如varchar(8000)、nvarchar(4000)),设置最大显示长度,取值范围1-8000-Y <n>:针对大对象字符类型列(如varchar(max)、text、ntext),设置最大显示长度,取值范围1-8000;设为0表示不限制长度(注意:大内容可能导致性能问题或输出文件过大)
你之前添加-y 800后无输出,大概率是因为被截断的列属于大对象类型,仅用-y无法生效,同时需确保命令参数格式正确、输出路径有写入权限、输入SQL文件存在。
修正后的命令示例
如果不确定列类型,可同时添加两个参数覆盖所有情况:
sqlcmd -S . -E -h -1 -y 800 -Y 800 -W -i "C:\PathWhereSQLQueryIsLocated\SQLQuery.sql" -s"\t" -o "C:\PathWereOutputFileIsPlaced\FileName.rpt"
注:原命令中
-s" "是空格分隔,若你需要的是制表符分隔,应改为-s"\t";若保留空格分隔,可维持原-s" "参数。
额外检查点
- 确认输出目录有写入权限,避免因权限问题导致无输出文件
- 若列内容超过8000字符,可将
-Y设为0(-Y 0),但需注意输出文件大小
内容的提问来源于stack exchange,提问作者Hayco
相关产品推荐
相关产品推荐

