如何延长sqlcmd中object_definition返回的视图定义字符串长度?
解决sqlcmd提取视图定义时字符串被截断的问题
这个问题我之前帮不少开发者处理过——sqlcmd默认对大文本类型的输出有长度限制,才会导致视图定义这类长内容被截断。这里给你几个实用的解决办法:
1. 调整sqlcmd的-y参数(核心解决方法)
sqlcmd默认对TEXT、NTEXT、VARCHAR(MAX)这类大文本列的输出长度限制为256字符,你可以通过-y参数手动设置更大的上限(最大支持8000),如果视图定义特别长,甚至可以设为0来取消长度限制:
# 设置输出长度为8000字符 sqlcmd -i extract.sql -o %oudir%\extracted.dat -y 8000 # 取消大文本输出长度限制(适合超长篇幅的视图定义) sqlcmd -i extract.sql -o %oudir%\extracted.dat -y 0
注意:用-y 0时,如果视图定义极大,可能会增加sqlcmd的运行时间和输出文件大小,按需使用即可。
2. 配合-w参数解决行宽截断问题
如果是因为单行内容太长被强制换行,看起来像截断,还可以加上-w参数调整行宽(默认行宽是80字符):
sqlcmd -i extract.sql -o %oudir%\extracted.dat -y 8000 -w 10000
这个参数控制每行最多显示的字符数,避免长内容被拆分到多行导致的“视觉截断”。
3. 在SQL脚本中设置TEXTSIZE
除了sqlcmd参数,你还可以在你的extract.sql脚本开头添加SQL Server的系统设置命令,强制返回完整的文本内容:
-- 设置SQL Server返回的最大文本大小(最大值为2147483647) SET TEXTSIZE 2147483647; SELECT object_definition(object_id('你的视图名称')) AS ViewDefinition;
这个命令会让SQL Server本身返回完整的视图定义,再配合sqlcmd的-y参数,效果会更稳定。
额外小提示
有时候看起来像是内容被截断,可能只是文本编辑器的限制——比如默认的记事本会自动换行,建议用Notepad++这类支持长行的编辑器打开输出文件,确认内容是否真的完整。
内容的提问来源于stack exchange,提问作者René Nyffenegger
相关产品推荐
相关产品推荐

