存储过程输出参数无法返回结果集仅支持单个标量值正确方式是直接SELECT、临时表或XML/JSON字符串输出避免误用游标等非常规方案。存储过程不能用输出参数返回结果集SQL Server以及绝大多数数据库的输出参数 output 只能传回单个标量值比如 INT、VARCHAR(50)、DATETIME。想让输出参数“带回一整张表”是根本做不到的——这不是写法问题是设计限制。常见错误现象Msg 102, Level 15, State 1, Procedure xxx, Line X: Incorrect syntax near result或者执行后 result 始终为 NULL哪怕你在里面写了 SELECT *。输出参数本质是变量赋值不是数据管道SELECT * FROM ... 在存储过程中只是“执行查询”不自动绑定到任何参数试图用 SET output (SELECT ...) 会报错子查询返回多行大结果集该用什么方式传出真正可行的路径只有三条按推荐顺序排列直接 SELECT最常用客户端通过常规结果集读取SQL Server 自动流式传输内存压力可控适用于应用层能处理多结果集的场景如 C# 的 SqlDataReader、Python 的 cursor.fetchall()临时表 表值函数或后续查询把结果先插入 #temp再由调用方查适合需要多次引用、或跨多个存储过程共享中间结果的情况XML/JSON 输出参数仅小数据量用 FOR XML 或 FOR JSON 把结果转成字符串存进 VARCHAR(MAX) 输出参数但超过几 MB 就容易触发截断、性能陡降且客户端还得反序列化别碰游标返回、全局临时表、CLR 等非常规方案——维护成本高排查困难多数情况下纯属给自己加戏。为什么有人误以为“输出参数能返结果集”混淆点通常来自三类场景 通义听悟 阿里云通义听悟是聚焦音视频内容的工作学习AI助手依托大模型帮助用户记录、整理和分析音视频内容体验用大模型做音视频笔记、整理会议记录。