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

如何在SQL中通过PRINT或其他方式输出查询结果的每一行值?

实现SQL查询结果按指定格式逐行输出

嘿,这事儿好办!我给你两种实现方式,你可以根据自己的需求来选:

方式一:用游标逐行读取并输出

这种方式逻辑清晰,能精准控制每一行的输出,适合需要逐行处理的场景:

DECLARE @UserRolesList NVARCHAR(MAX) = 'Admin, Dog, BranchManager, Naid' --DECLARE @UserRolesList NVARCHAR(MAX) = 't1, t2, t3'
DECLARE @UserRoles TABLE (Name VARCHAR(max))
INSERT INTO @UserRoles SELECT value FROM STRING_SPLIT(@UserRolesList, ',')

-- 定义变量存储每行的字段值(根据你的UserRole表实际字段调整)
DECLARE @RoleName NVARCHAR(MAX), @RoleDesc NVARCHAR(MAX)

-- 声明游标,指向你的关联查询结果
DECLARE role_cursor CURSOR FOR
SELECT u.Name, u.Description -- 替换成你UserRole表中实际要输出的字段
FROM UserRole u 
JOIN @UserRoles r ON u.Name = TRIM(r.Name)

-- 打开游标并开始遍历
OPEN role_cursor
FETCH NEXT FROM role_cursor INTO @RoleName, @RoleDesc

WHILE @@FETCH_STATUS = 0
BEGIN
    -- 拼接成你要的格式并输出,不需要外层单引号就去掉前后的'''
    PRINT(CONCAT('''', @RoleName, ', ', @RoleDesc, ''''))
    
    -- 读取下一行数据
    FETCH NEXT FROM role_cursor INTO @RoleName, @RoleDesc
END

-- 清理游标资源
CLOSE role_cursor
DEALLOCATE role_cursor

注意点:

  • 把代码里的u.Description替换成你UserRole表中实际的描述字段(比如RoleDescription之类的)。
  • 如果不需要输出字符串外层的单引号,直接把CONCAT里的''去掉就行。

方式二:用STRING_AGG批量拼接后一次性输出

如果你的结果行数不多,这种方式更简洁,通过换行符把所有结果拼接成一个字符串后一次性打印:

DECLARE @UserRolesList NVARCHAR(MAX) = 'Admin, Dog, BranchManager, Naid' --DECLARE @UserRolesList NVARCHAR(MAX) = 't1, t2, t3'
DECLARE @UserRoles TABLE (Name VARCHAR(max))
INSERT INTO @UserRoles SELECT value FROM STRING_SPLIT(@UserRolesList, ',')

DECLARE @OutputContent NVARCHAR(MAX)

-- 用STRING_AGG拼接所有行,CHAR(10)代表换行符
SELECT @OutputContent = STRING_AGG(
    CONCAT('''', u.Name, ', ', u.Description, ''''), -- 同样根据实际字段调整
    CHAR(10)
)
FROM UserRole u 
JOIN @UserRoles r ON u.Name = TRIM(r.Name)

-- 输出最终拼接好的内容
PRINT @OutputContent

优势:

  • 代码更短,不需要处理游标,适合快速实现需求。
  • 输出效果和逐行PRINT一致,每行对应一条结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 00:12:47