如何在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
相关产品推荐
相关产品推荐

