我正在尝试检索 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/