sql-server - 如何使用 SMO 更有效地检索 SQL 存储过程参数?

标签 sql-server performance smo

我正在尝试检索 StoredProcedure 中所有参数的 DefaultValue。我的应用程序是在 C# .NET 中构建的,用于访问 Microsoft SQL 2008 数据库。

我使用 SqlCommandBuilder.DeriveParameters 来相当有效地获取大部分参数信息,但它不返回参数的“DefaultValue”,因此我求助于 SMO 来获取该特定属性。

这是我当前的代码:

        Server svr = new Server(new ServerConnection(new SqlConnection(ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString)));
        StoredProcedure sp = svr.Databases["MyDatabase"].StoredProcedures["mySproc", "myScheme"];
        svr.SetDefaultInitFields(typeof(StoredProcedureParameter), "Name");
        svr.SetDefaultInitFields(typeof(StoredProcedureParameter), "DefaultValue");

        Dictionary<string, string> defaultValueLookup = new Dictionary<string, string>();
        foreach (StoredProcedureParameter parameter in sp.Parameters)
        {
            string defaultValue = parameter.DefaultValue;
            string parameterName = parameter.Name;
            defaultValueLookup.Add(parameterName, defaultValue);
        }

然而,即使在我添加了 svr.SetDefaultInitFields 优化(这确实有显着的改进~10 倍的改进)之后,这仍然非常慢。

有人有进一步的优化想法吗?

最佳答案

我有一个类似的问题,发现如果你使用...

svr.SetDefaultInitFields(typeof(StoredProcedure), false)

它的速度更快。我假设使用任何其他选项,它实际上可以获取所有内容,但是如果您将其关闭,那么只需获取您的参数,速度就会大大提高。对于 10 参数 sp,在 5-6 秒到 0.5 秒之间进行挖掘。仍然不是很完美,但宜居。

编辑

由于多玩了一点,我发现 typeof(StoredProcedure)水平方法效果最好。在我使用 typeof(StoreedProcedureParameter) 的测试中与 typeof(StoredProcedure) 的 0.5 秒左右相比,选项始终为 1.5 秒左右。版本。

如果有人能告诉我为什么,我会感兴趣吗?

关于sql-server - 如何使用 SMO 更有效地检索 SQL 存储过程参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8528472/

相关文章:

sql-server - 如何将 SQL Server 数据库的访问权限限制为特定 IP?

c# - HashSet 或 Distinct 以读取对象 List<> 中属性的不同值

android - Android 键盘关闭时闪烁?

sql-server-2008 - 无法将类型 "Microsoft.SqlServer.Management.Smo.Server"的值转换为类型 "Microsoft.SqlServer.Management.Smo.Server"

sql - 如何使用 SQL 创建事件的内部编号

sql - 从同一列中的两行获取时间跨度

sql - 多个 INSERT 语句与具有多个 VALUES 的单个 INSERT

ios - IOS模拟器和Iphone之间的重大应用程序性能差异

c# - 在类中定义公共(public)枚举有什么好处?

c# - 从 bak 文件中检索数据库名称