Linux下sqlcmd执行PRINT命令截断长消息问题求助
Linux下sqlcmd执行PRINT长字符串被截断的解决思路
问题背景
环境:Linux系统,sqlcmd版本17.10.0001.1,连接Microsoft SQL Server 2017
执行命令:sqlcmd -S [server] -d [db] -U [user] -i input.sql -o output.sql
问题:input.sql中生成的NVARCHAR类型变量@message长度超过1000字符,执行PRINT @message后输出文件仅保留约1000字符即被截断。Windows和Mac环境下无此问题,尝试转换为TEXT类型无效,且@message含固定格式换行无法拆分输出。
解决思路
改用SELECT替代PRINT输出
直接用SELECT @message替换PRINT @message,sqlcmd对SELECT结果的输出没有1000字符的截断限制,既能完整输出长字符串,也能保留原有换行格式。调整sqlcmd行宽配置
执行命令时添加-w <宽度值>参数,设置足够大的行宽上限,比如:sqlcmd -S [server] -d [db] -U [user] -i input.sql -o output.sql -w 81928192是sqlcmd支持的最大行宽值,通过该参数可以避免因默认行宽限制导致的字符串截断。
升级sqlcmd版本
该截断问题大概率是Linux版sqlcmd 17.10.0001.1的版本bug,尝试升级到最新版的mssql-tools,新版本通常会修复这类兼容性问题。
内容的提问来源于stack exchange,提问作者QwertyStuff
相关产品推荐
相关产品推荐

