2015-02-09 85 views

回答

1

从技术上讲,系统对象是那些具有sysobjects.id < 256的系统对象。这些大多数只是预定义的系统表,不能受DBA的影响。这些有sysobjects.type ='S'。

这不包括'系统'视图(如sysquerymetrics)和系统存储特效,如sp_help等,这些是真正创建后,当installmaster脚本(及其堂兄弟)运行,这些将因此有一个对象ID> 255和对象类型<>'S'。

没有什么能阻止你在sybsystemprocs中创建你自己的'sp_'过程(并且有很多很好的理由这么做),所以你不能通过'sp_'前缀判断系统是否存储过程。

所以基本上,没有水密的方式来测试除了真实系统表之外的任何东西。你当然可以建立你自己的函数来检查这个,它可以包含由installmaster脚本创建的所有过程的列表,但这听起来像是一个非常繁重的解决方案。

0

可以检查sysobjects用于type = “U” 的用户对象,或者用于系统对象类型= “S”。

select name, type from sysobjects 
where type = "U" 

select name, type from sysobjects 
where type = "S" 

type的其它典型值是: U =用户对象 S =系统对象 RI =约束 D =默认 R =规则 TR =触发 P =步骤

对于视图和其他非表对象(除过程外),SAP ASE使用sys为名称加前缀。对于过程,SAP ASE以sp_mon_为前缀,然后您需要检查它是否存在于sybsystemprocsmaster中,以确定它是否是系统过程。

+0

如果我想获得所有用户创建的视图,我唯一的选择是获得所有那些“where type ='V'”,排除那些以“sys”为前缀的视图,并希望没有人创建一个视图前缀用“sys”? – Badgerspot 2015-02-09 15:08:01

+0

不幸的是,情况就是这样。 – 2015-02-10 02:28:13