我想知道如何确定对象(例如视图)是系统对象还是用户对象。这可能吗?
我正在使用SAP ASE 16.0。
由于
答案 0 :(得分:1)
从技术上讲,系统对象是那些带有sysobjects.id< 256.这些只是预定义的系统表,不受DBA的影响。这些有sysobjects.type ='S'。
这不包括'系统'视图(如sysquerymetrics)和系统存储的procs,如sp_help等,这些都是在运行installmaster脚本(及其表兄弟)之后真正创建的,因此它们将具有一个对象ID > 255和对象类型<> 'S'。
没有什么能阻止你在sybsystemprocs中创建你自己的'sp_'程序(并且有很多很好的理由这样做),所以你不能通过'sp_'前缀来判断某些东西是否是系统存储过程。
所以基本上,除了真正的系统表之外,没有任何防水方法可以测试它。您当然可以构建自己的函数来检查它,其中可能包含installmaster脚本创建的所有过程的列表,但这听起来像是一个非常重的解决方案。
答案 1 :(得分: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_
,并且您需要检查它是否存在于sybsystemprocs
或master
中,以确定它是否为系统过程