解决方法
除非您准备在INFORMATION_SCHEMA.ROUTINES中解析ROUTINE_DEFINITION的内容,否则最好的方法是执行该过程,并从返回的记录中读取列信息.
在.NET中,您可以通过将存储过程的结果读入DataTable并查询Columns属性来执行此操作.
没有简单的方法可以这样做的原因是存储过程可能会根据参数返回不同的结果集.没有固定的结果集格式,就像用户定义的函数一样.
编辑
如另一答案所述,您将需要使用SET FMTONLY ON来确保不返回任何数据.在某些情况下,SET FMTONLY将无法工作,例如当您在存储过程中使用#temp表时,但是有一个workaround.