我注意到,当我查询dbo.sysobjects时,为了确定我数据库中的所有对象,它还会选取名称以'syncobj_'开头的所有系统视图。它们的xtype为'V',似乎没有任何方式可以知道这些是系统视图,除了检查视图的名称外,并不是我自己的。有没有其他的方法?我想从我正在创建的查询中排除这些。SQL Server - 查询sysobjects
回答
IsMSShipped
SQL Server安装过程中创建的任何架构范围内的对象
对象。 1 =真0 =假
使用它是这样的:
SELECT * from sysobjects where OBJECTPROPERTY(ID,N'IsMSShipped') = 0
它的文档是有点过,但 - 它也帮助你排除其他对象增加了“通过”的SQL Server在以后的日子也 - 例如任何复制相关的对象也被认为是IsMSShipped
。
试着这么做:
select *
from sysobjects
where name NOT IN (
select name from sys.system_views
)
实际上可能更好地使用object_id。 'select * from sysobjects 其中id NOT IN( \t从sys.system_views中选择object_id )' –
记得加入你的表。 select * from sysobjects where id NOT IN(从sys.system_views中选择object_id,其中sysobjects.id = object_id)或更好,则存在使用。 –
这仍然允许系统表和其他对象通过。 –
由于您使用的是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;
请注意,这仍然会返回一些系统对象,例如dtproperties表(在添加图表支持到数据库时添加)不被视为MS发布,而是用户表。 –
- 1. SQL Server - 为sysobjects返回SCHEMA
- 2. SQL Server 2008 sysobjects位置
- 3. 如何用linq查询sysobjects?
- 4. SQL:用sysobjects代替sysobjects代码
- 5. PostgreSQL中SQL Server的sysobjects的替代
- 6. SQL Server查询
- 7. SQL Server查询
- 8. SQL Server查询
- 9. SQL Server查询
- 10. SQL Server查询
- 11. SQL Server查询
- 12. SQL Server查询
- 13. SQL Server查询
- 14. SQL Server查询
- 15. SQL Server查询?
- 16. SQL Server查询子查询
- 17. 总SQL Server查询
- 18. SQL Server树查询
- 19. SQL Server的查询
- 20. 查询SQL Server CE
- 21. 的SQL Server查询
- 22. Xpath SQL Server查询
- 23. 写SQL Server查询
- 24. SQL Server 2008查询
- 25. SQL Server查询buildup
- 26. C#SQL Server查询
- 27. SQL Server 2005查询
- 28. SQL Server XML查询
- 29. SQL Server 2014查询
- 30. Sql Server 2008查询
你可能想看看这个SO Q/A:您正在使用什么版本的SQL Server http://stackoverflow.com/questions/2910077/what-is-syncobj-in-sql-server – bzarah
?这可能会影响您获得的回复的有效性或质量。例如,如果您在2005+以上,那么比sysobjects有更好的答案。建议使用确切(或最小)版本标记标签(例如标签“sql-server-2008”)。 –
@Aaron - 如果我需要数据库中所有对象的完整列表,那么比sysobjects有什么更好的选择?我知道我可以使用信息模式视图,但是我需要查询其中的十几个。使用2008. –