SQL Server - 查询sysobjects

时间:2011-06-29 13:38:33

标签: sql-server tsql sql-server-2008

我注意到当我查询dbo.sysobjects时,为了确定我的数据库中的所有对象,它还会获取名称以“syncobj_”开头的所有系统视图。它们的xtype为'V',除了通过检查视图的名称之外,我似乎没有任何方式可以知道这些是系统视图,而不是我自己的视图。还有其他方法吗?我想从我正在创建的查询中排除这些。

3 个答案:

答案 0 :(得分:2)

请参阅OBJECTPROPERTY

  

IsMSShipped

     

任何架构范围的对象

     

在安装SQL Server期间创建的对象。 1 =真0 =假

使用类似:

SELECT * from sysobjects where OBJECTPROPERTY(ID,N'IsMSShipped') = 0

虽然它的文档有点偏离 - 它还可以帮助您排除“以后”SQL Server添加的其他对象 - 例如任何与复制相关的对象也被视为IsMSShipped

答案 1 :(得分:0)

尝试类似:

select *
from sysobjects
where name NOT IN (
    select name from sys.system_views
)

答案 2 :(得分:0)

由于您使用的是SQL Server 2008,因此没有理由继续使用过时的兼容性视图sysobjects。您应该使用SQL Server 2005中引入的目录视图sys.objects。作为额外的好处,您不需要为每一行调用外部OBJECTPROPERTY()函数,因为它包含一个名为is_ms_shipped的列,它显示了相同的信息。

SELECT OBJECT_SCHEMA_NAME([object_id]), name, type
 FROM sys.objects
 WHERE is_ms_shipped = 0;