是否有通過元數據(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. 獲取存儲過程的返回值
- 5. 存儲過程返回類型?
- 6. 獲取存儲過程的列名
- 7. 返回匿名類型的存儲過程LINQ2SQL
- 8. 返回三列從存儲過程
- 9. 從Dapper存儲過程返回列表
- 10. T-SQL檢測存儲過程返回的列的類型
- 11. 從存儲過程執行中返回的類型
- 12. 獲取從存儲過程返回的表的記錄數
- 13. 如何獲取由WSO2中的存儲過程返回的CLOB類型ESB
- 14. 如何從我的存儲過程獲取返回值?
- 15. 如何從VB.NET中的存儲過程獲取返回值
- 16. 使用MySQLdb從Python獲取MySQL存儲過程的返回值
- 17. 如何從Toad中的存儲過程獲取返回碼?
- 18. 如何從PLSQL存儲過程返回集合類型
- 19. 如何讀取使用java從存儲過程返回的類型的ARRAY?
- 20. 保存存儲過程的列類型
- 21. 捕獲存儲過程的返回值
- 22. 如何從存儲過程返回獲取COUNT?
- 23. 從存儲過程獲取默認返回值?
- 24. 無法從存儲過程中獲取返回值(0或1)。
- 25. 使用PHP從SQL存儲過程獲取返回值
- 26. 從存儲過程獲取返回值在asp.net
- 27. 從存儲過程獲取返回值在VB.NET
- 28. Perl DBI與MySQL:如何從存儲過程獲取返回值?
- 29. 從存儲過程獲取空值返回
- 30. 從另一個存儲過程中捕獲存儲過程的返回值
對於SQL2012,請按照本文中的建議操作:http://stackoverflow.com/a/14575114/569662 – 2016-04-15 09:40:57
如果Microsoft堅持在.NET Core中棄用DataTable,那麼如果您轉移到Core,此方法將停止工作。 – 2016-09-16 19:34:49