0

我已将应用程序中的性能开销缩小到此块:

Server currentServer = new Server(databaseConnection.DataSource);
Database currentDatabase = currentServer.Databases[databaseConnection.InitialCatalog];

foreach (View view in currentDatabase.Views)
{
    if (view.IsSystemObject == false)
    {
        if (view.Name.Equals(viewName))
        {
            MessageBox.Show(parent, "A virtual table with that name already exists! Virtual\ntable not created.", "Not created", MessageBoxButton.OK, MessageBoxImage.Information);
            break;
         }
         else
         {
             valid = true;
             break;
         }
    }
}

我基本上想遍历不属于系统的数据库视图。但是,使用这种方法,SMO库无论如何都会遍历所有视图。知道如何安排吗?

编辑:

例如,我只有大约 10 个用户定义的视图,但超过 1000 个系统视图。如何跳过系统视图并仅遍历用户定义的视图?

4

1 回答 1

2

目前尚不清楚您使用的是什么 API - 但如果您下拉到常规 TSQL / ADO.NET,您可以查看INFORMATION_SCHEMA.VIEWS/之类的内容sys.views,其中仅包含用户定义的视图。系统视图位于sys.system_views(均位于 中sys.all_views)。这将在服务器上完成所有限制,因此如果您查询INFORMATION_SCHEMA.VIEWS/ sys.views,通过网络返回的唯一数据是您感兴趣的数据。如果您在客户端过滤,则需要付费以传输所有数据也不感兴趣。

于 2013-03-06T12:22:02.443 回答