使用Microsoft.SqlServer.Management.Smo从StoredProc获取结果列而不执行它

mis*_*ghi 3 .net c# sql sql-server sql-server-2005

我想获得一个可以从SP中获得的结果集和列的列表.我已经能够得到参数,脚本......但我不知道从哪里得到结果集和列名.

using Microsoft.SqlServer.Management.Smo;

using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["mydbconn"].ConnectionString))
        {
            conn.Open();
            Server sv = new Server(new Microsoft.SqlServer.Management.Common.ServerConnection(conn));
            Database db = sv.Databases["mydb"];

            foreach (StoredProcedure sp in db.StoredProcedures)
            {
                string[] columns = sp.??????
            }

        }
Run Code Online (Sandbox Code Playgroud)

有没有办法进入列?我最终试图编写一个代码生成器来自动编写数据访问对象.谢谢!

编辑:"另一个解决方案是,如果你可以获得ScalarResult的值,你可以将它转换为有用的东西,你可以从中派生出来." :任何想法如何实现?

Mar*_*ell 6

这是一个众所周知的困难领域.有些系统通过执行带有SET FMTONLY ON启用的存储过程来尝试这个,但是它有一系列问题(即它仍然会执行一些代码,这可能很糟糕).众所周知,很难获得非平凡查询的模式(例如,不同的分支做不同的选择).

如果您知道这些程序是无副作用的,并且不在SELECT分支机构中,那么请尝试一下SET FMTONLY ON- 但至少要了解可能的影响.

对于查询,在某些方面,表值函数(UDF)可能更实用,因为模式是形式化的.