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

我正在尝试检索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个参数,从5-6秒到0.5秒进行挖掘.仍然不是很完美但适合居住.

编辑

自从玩这个以后,我发现typeof(StoredProcedure)级别的appraoch效果最好.在我的测试中,使用typeof(StoreedProcedureParameter)选项始终为1.5秒左右,而使用typeof(StoredProcedure)版本则为0.5秒左右.

如果有人能告诉我原因,我会感兴趣吗?

点赞