我正在尝试检索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倍的改进),这也非常慢。
有人有进一步的优化想法吗?
答案 0 :(得分:2)
我有一个熟悉的问题,发现如果你使用......
svr.SetDefaultInitFields(typeof(StoredProcedure), false)
方式更快。我认为,除了任何其他选项,它实际上取得了所有东西,但是如果你关闭它,那么只要获得你的参数,速度的提升是巨大的。对于10个参数,从5-6秒到0.5秒进行挖掘。仍然不是很完美但适合居住。
修改强>
自从玩这个以后,我发现typeof(StoredProcedure)
级别的appraoch效果最好。在我的测试中,使用typeof(StoreedProcedureParameter)
选项始终为1.5秒左右,而typeof(StoredProcedure)
版本为0.5秒左右。
如果有人能告诉我原因,我会感兴趣吗?
答案 1 :(得分:0)
您可以使用解析器从存储过程中检索默认值,例如Microsoft.Data.Schema.ScriptDom