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

如何在sqlcmd中垂直显示MS SQL查询结果?

模拟MySQL \G的垂直显示效果在sqlcmd里

我太懂这种烦恼了——sqlcmd默认的表格显示遇上长文本,终端自动换行后整个结果乱糟糟的,读起来眼睛都花。其实咱们可以通过几种方式实现类似MySQL \G的垂直显示效果,或者至少让输出更易读:

方法一:手动构造垂直输出(适合单条记录)

如果只是查询单条记录,直接把每个字段单独输出成一行就行,简单粗暴但有效。比如你原本的查询是:

SELECT UserID, UserName, Email, Bio FROM Users WHERE UserID = 123;

改成这样:

SET NOCOUNT ON; -- 去掉影响行数的提示
SELECT 'UserID: ' + CAST(UserID AS VARCHAR(10)) FROM Users WHERE UserID = 123
UNION ALL
SELECT 'UserName: ' + UserName FROM Users WHERE UserID = 123
UNION ALL
SELECT 'Email: ' + Email FROM Users WHERE UserID = 123
UNION ALL
SELECT 'Bio: ' + Bio FROM Users WHERE UserID = 123;

输出就会变成:

UserID: 123
UserName: JohnDoe
Email: john@example.com
Bio: 这是一段很长很长的个人简介,再也不会被自动拆成好几行了!

方法二:动态SQL自动生成垂直输出(通用方案)

如果要查的表字段多,手动写太麻烦?用动态SQL自动生成垂直输出的语句就行,不管多少字段都能搞定:

DECLARE @TableName NVARCHAR(128) = 'Users'; -- 替换成你的表名
DECLARE @WhereClause NVARCHAR(MAX) = 'WHERE UserID = 123'; -- 替换成你的查询条件
DECLARE @SQL NVARCHAR(MAX) = '';

-- 拼接每个字段的输出语句
SELECT @SQL = @SQL + 
    'SELECT ''' + COLUMN_NAME + ': '' + CAST(' + COLUMN_NAME + ' AS NVARCHAR(MAX)) 
     FROM ' + @TableName + ' ' + @WhereClause + ' UNION ALL '
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @TableName;

-- 去掉最后多余的UNION ALL
SET @SQL = LEFT(@SQL, LEN(@SQL) - 10);

-- 执行生成的SQL
EXEC sp_executesql @SQL;

只要替换表名和查询条件,就能自动把所有字段转成垂直格式输出,完美模拟\G的效果。

方法三:调整sqlcmd窗口宽度(临时救急)

如果只是偶尔遇到换行问题,可以用-w参数设置sqlcmd的输出宽度,比如:

sqlcmd -S YourServer -d YourDB -w 200 -Q "SELECT * FROM Users WHERE UserID=123;"

-w 200表示把输出宽度设为200个字符,超过这个宽度才会换行。不过这个方法治标不治本,超长文本还是会折行,不如垂直显示直观。

方法四:输出到文件后查看

如果终端实在不好处理,把结果输出到文本文件再打开:

sqlcmd -S YourServer -d YourDB -o "query_results.txt" -Q "SELECT * FROM Users WHERE UserID=123;"

然后用记事本或者其他文本编辑器打开文件,调整窗口大小就能舒服阅读了。

这些方法里,我个人最常用的是动态SQL的方案,灵活又省心,基本能覆盖大部分场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:27:52