3

我目前正在使用 SMO 和 C# 来遍历数据库以创建代表两个数据库各个方面的设置树,然后比较这些树以查看它们的不同之处和方式。

问题是,对于 2 个大小合理的数据库,在本地抓取它们并收集我希望比较的表/列/存储过程信息需要将近 10 分钟。

有没有比 SMO 更好的界面来以这种方式访问​​数据库?我不想包含任何额外的依赖项,但我会为提高 50% 的速度而感到痛苦。下面是我如何枚举表和列的示例。

        Microsoft.SqlServer.Management.Smo.Database db = db_in;
        foreach (Table t in db.Tables)
        {
            if (t.IsSystemObject == false)
            {

                foreach (Column c in t.Columns)
                {
                }                    
            }
        }
4

3 回答 3

8

尝试强制 SMO 一次读取所有必填字段,而不是查询访问权限。有关更多信息,请参阅此博客


编辑:链接已失效,但我在archive.org 上找到了该页面。以下是相关代码:

Server server = new Server();

// Force IsSystemObject to be returned by default.
server.SetDefaultInitFields(typeof(StoredProcedure), "IsSystemObject");

StoredProcedureCollection storedProcedures = server.Databases["AdventureWorks"].StoredProcedures;

foreach (StoredProcedure sp in storedProcedures) {
    if (!sp.IsSystemObject) {
        // We only want user stored procedures
    }
}
于 2008-12-30T22:59:06.990 回答
2

使用每个数据库中的系统视图和常规查询。

http://www.microsoft.com/downloads/details.aspx?familyid=2EC9E842-40BE-4321-9B56-92FD3860FB32&displaylang=en

于 2008-12-30T22:52:30.137 回答
0

您无法通过 TSQL 查询获得的信息很少。以这种方式获取元数据通常非常快。

于 2008-12-30T23:21:14.290 回答