查询Sys.Tables时如何排除系统表?

Cod*_*ies 5 sql-server sql-server-2008

我正在运行这个SQL:

SELECT S.name as Owner, T.name as TableName FROM  sys.tables AS T
JOIN sys.schemas AS S ON S.schema_id = T.schema_id
Run Code Online (Sandbox Code Playgroud)

结果是:

Owner   TableName
------------------------
dbo         Person
dbo         Customer
dbo         sysdiagrams
Run Code Online (Sandbox Code Playgroud)

sysdiagrams是一个system table但结果显示.

更新: 感谢所有人的回答和评论,我正在使用Nate Bolamvmvadivel答案:

SELECT S.name as Owner, T.name as TableName 
FROM  
  sys.tables AS T
    INNER JOIN sys.schemas AS S ON S.schema_id = T.schema_id
    LEFT JOIN sys.extended_properties AS EP ON EP.major_id = T.[object_id]
WHERE 
  T.is_ms_shipped = 0 AND 
  (EP.class_desc IS NULL OR (EP.class_desc <>'OBJECT_OR_COLUMN' AND 
  EP.[name] <> 'microsoft_database_tools_support'))
Run Code Online (Sandbox Code Playgroud)

Nat*_*lam 10

SSMS使用扩展属性将sysdiagrams表标记为一种伪系统表.

试试这个:

SELECT S.name as Owner, T.name as TableName FROM  sys.tables AS T
INNER JOIN sys.schemas AS S ON S.schema_id = T.schema_id
LEFT JOIN sys.extended_properties AS EP ON EP.major_id = T.[object_id]
WHERE (EP.class_desc IS NULL 
OR (EP.class_desc <> 'OBJECT_OR_COLUMN'
    AND EP.[name] <> 'microsoft_database_tools_support'))
Run Code Online (Sandbox Code Playgroud)