是否有通过元数据(Information_Schema,也许?)获取sproc将返回列的列表的方法?我试图自动化一些代码生成,这将有极大的帮助...获取从存储过程返回的列名/类型
14
A
回答
13
除非你准备解析INFORMATION_SCHEMA.ROUTINES中的ROUTINE_DEFINITION的内容,那么你最好的选择将是执行程序,并阅读来自记录的列信息被返回。
在.NET中,您可以通过将存储过程的结果读入DataTable并查询Columns属性来完成此操作。
有没有简单的方法来做到这一点的原因是存储过程可能会根据参数返回不同的结果集。没有固定的结果集格式,就像用户定义的函数一样。
编辑
正如在其他答复中提到,您将需要使用SET FMTONLY ON,以确保不会返回任何数据。 SET FMTONLY在某些情况下不起作用,例如在存储过程中使用#temp表时,但存在workaround。
9
我刚刚运行了Profiler来查看Visual Studio如何为强类型的数据集拖放操作。
这是它发送的代码。
SET NO_BROWSETABLE ON;
SET FMTONLY ON;
exec dbo.aspnet_Roles_GetAllRoles @ApplicationName=NULL
所以我认为可能没有任何“更正式”的方式来做到这一点。
显然你需要记住单个存储过程可能会返回多个结果集或依赖于传递的参数的不同结果集。
对于人们对2012+的另一种方法可能是使用sp_describe_first_result_set
1
我这样做的方式: 编辑存储过程有一个INTO子句:
变化
Select * from tablename
到
Select * INTO _tablename FROM tablename
这产生了数据库中的表。 然后,使用SELECT * FROM INFORMATION_SCHEMA WHERE TABLE_NAME = '_tablename'
不要忘记取消对存储区的修改。
相关问题
- 1. 从存储过程获取返回值
- 2. 从存储过程获取返回值
- 3. 获取存储过程的列名
- 4. 返回匿名类型的存储过程LINQ2SQL
- 5. T-SQL检测存储过程返回的列的类型
- 6. 从存储过程执行中返回的类型
- 7. 获取从存储过程返回的表的记录数
- 8. 如何从Toad中的存储过程获取返回码?
- 9. 使用MySQLdb从Python获取MySQL存储过程的返回值
- 10. 如何从VB.NET中的存储过程获取返回值
- 11. 保存存储过程的列类型
- 12. Perl DBI与MySQL:如何从存储过程获取返回值?
- 13. 如何从存储过程返回获取COUNT?
- 14. 从存储过程获取默认返回值?
- 15. 无法从存储过程中获取返回值(0或1)。
- 16. 从存储过程获取返回值在asp.net
- 17. 从PHP返回的MySqli存储过程
- 18. 从c#中的存储过程获取返回值(登录过程)
- 19. 从SQL Server存储过程获得空结果存储过程,返回XML
- 20. 从空白存储过程数据集中获取列名称
- 21. 存储过程postgresql返回重复列
- 22. 返回强类型的存储过程结果
- 23. 的LINQ to SQL和存储过程返回类型
- 24. LINQ to SQL - 无法修改存储过程的返回类型
- 25. 针对Oracle Clobs的存储过程OutBound Gateway返回类型?
- 26. 由存储过程返回的别名列[SQL Server 2008]
- 27. 从存储过程返回变量MySQL
- 28. 从存储过程检查返回值
- 29. WCF从存储过程返回结果
- 30. 如何从存储过程返回XML?
对于SQL2012,请按照本文中的建议操作:http://stackoverflow.com/a/14575114/569662 – 2016-04-15 09:40:57
如果Microsoft坚持在.NET Core中弃用DataTable,那么如果您转移到Core,此方法将停止工作。 – 2016-09-16 19:34:49