2013-11-27 20 views
1

当我试图获取项目的这些对象的列表时,如何跳过系统视图/表/过程?.Net SQL Server管理对象表/视图/过程集合

现在我正在对名称和/或模式进行字符串比较,但我认为有更好的方法来做到这一点。

代码

''' <summary> 
''' Grab all our tables, attempting to skip over system tables 
''' </summary> 
''' <remarks></remarks> 
Private Sub GrabTables() 
    Dim _Db As Database = Srv.Databases(0) 
    Dim _Tbls As ParallelQuery = _Db.Tables.AsParallel() 
    For Each tbl In _Tbls 
     If Not tbl.Name.Contains("sys") Then 
      _Tables.Add(New TableTyping() With { 
         .Name = tbl.Name, 
         .Schema = tbl.Schema, 
         .Columns = ProcessColumns(tbl.Columns)}) 
     End If 
    Next 
    MsgBox(_Tables.Count) 
End Sub 

''' <summary> 
''' Grab all our views, make sure to skip over system, and information views 
''' </summary> 
''' <remarks></remarks> 
Private Sub GrabViews() 
    Dim _Db As Database = Srv.Databases(0) 
    Dim _Tbls As ParallelQuery = _Db.Views.AsParallel() 
    For Each tbl In _Tbls 
     If Not tbl.Name.Contains("sys") AndAlso Not tbl.Schema.Contains("sys") AndAlso Not tbl.Schema.Contains("INFORMATION") Then 
      _Views.Add(New TableTyping() With { 
         .Name = tbl.Name, 
         .Schema = tbl.Schema, 
         .Columns = ProcessColumns(tbl.Columns)}) 
     End If 
    Next 
    MsgBox(_Views.Count) 
End Sub 

回答

0

是一个漫长的一周。每个对象的属性都被称为IsSystemObject。由于使用了AsParallel

+0

,所以我没有看到它。另外,大多数系统对象都在'sys.'模式中。除了那些烦人的图表对象,我通常用名称上的模式('NOT LIKE'dt_%')过滤出来。 – RBarryYoung