查找从VB.net应用程序使用的表以删除未使用的表

时间:2012-05-10 18:43:10

标签: sql database vb.net winforms

我们正在开发一个应用程序,我们称之为APP1,它使用一个SQL数据库,它有大约800个存储过程,600个表等。APP1最初是为了替换另一个应用程序而创建的,APP0,我们没有源代码,只有SQL表,存储过程,视图等。APP1的前一个程序员使用了来自同一个数据库的一些数据库对象,并添加了一些特定于APP1因为它大于APP0。我们不再需要APP0因为APP1可以满足我们想要的所有目标,等等。

因此,现在,我们正在考虑找出APP1使用哪些对象的方法,以便删除APP0使用的对象。< / p>

发现APP1使用的所有对象而不必打开每个类和表单的最佳方法是什么?

一旦我们将拥有这些对象的完整列表,就可以很容易地使用我们购买的程序,该程序检测直接从SQL指定的所有SQL对象的所有依赖项,并删除不从任何依赖项返回的对象。有关如何获得此列表的任何想法,而无需通过我们所有包含许多,许多,类和表单的程序?

谢谢,

注意:我知道,在一个完美的世界中,对PS和表的所有调用都应该在DAL中,但对于我们目前正在处理的应用程序的情况......这不是我们的情况! Yippy! (sarcastic yippy);)

注2:此应用程序未使用任何ORM。所以所有查询都直接使用SqlCommand。因此,对任何数据库对象的任何调用都是字符串格式。

3 个答案:

答案 0 :(得分:1)

你提到你有所有的桌子,Sprocs&amp;来自APP0的等等。大概有一个BAK,或者你可以通过在新的PC上安装APP0来获取原始的SQL对象。

然后使用SQL Compare from RedGate将APP1使用的数据库与原始APP0数据库进行比较,然后您可以看到已添加的对象,并可以删除所有冗余的APP0数据库对象。

答案 1 :(得分:0)

您可以在应用程序正在使用时在数据库上运行跟踪。这可能会创建相当大量的数据,但您可以将其减少到应用程序执行的过程和/或SQL语句。

您能保证您会或可以使用所有功能吗?您可能还想运行NCover这样的东西来检查您在使用它时运用了多少应用程序代码。

答案 2 :(得分:0)

我没有一个简单的答案,但这是我如何攻击它。我在前面承认这需要相当长的时间,所以我很乐意屈服于有更好答案的人。

这是一个两步问题。

步骤1:查找SQL中的所有依赖项。也就是说,查找用于创建视图的所有表,并查找存储过程和函数中使用的所有表和视图。 MS SQL Server具有为您执行此操作的功能。对于其他数据库,您可以针对information_schema(或其他专有的等价物)编写一些查询。

步骤2:获取代码中执行的所有SQL语句和存储过程的列表。如果您不动态构建SQL语句,这应该相对简单。只需搜索所有SQLCommand对象,并找到您设置查询的内容。您可以编写一个小程序来扫描您的源并将其转储出去。

然后解析此转储并创建引用的sprocs,表和视图的列表。按字母顺序排序并消除重复。然后添加从sprocs引用的任何表或视图以及从视图引用的任何表。再次排序和消除重复。然后你有你的清单。

如果你动态生成SQL,我认为复杂程度会大大增加。然后,您必须通过生成SQL的代码并选择表名来解决问题。如果有表名从函数传递到函数的地方,这可能会非常困难。 (我可以想象真正的梦魇场景,比如你要求用户输入一个表名或者你从片段中建立一个表名。就像,“dim tablename = if(dept =”B17“,”accounting“,”manufacturing“) &amp;“_”&amp; year“。)