我已将应用程序中的性能开销缩小到此块:
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个系统视图。如何跳过系统视图并仅遍历用户定义的视图?
答案 0 :(得分:2)
目前尚不清楚您正在使用哪种API - 但如果您使用常规TSQL / ADO.NET,您可以查看INFORMATION_SCHEMA.VIEWS
/ sys.views
之类的内容,其中只包含用户 - 定义的视图。系统视图位于sys.system_views
中(均位于sys.all_views
中)。这将执行服务器上的所有限制 ,因此,如果您查询INFORMATION_SCHEMA.VIEWS
/ sys.views
,则通过网络返回的唯一数据是您感兴趣的数据。如果您在客户端过滤,则需要付费以传输不感兴趣的所有数据。