SAP等效的IsMSShipped(即,是一个系统对象)

时间:2015-02-09 10:03:19

标签: sybase sybase-ase

我想知道如何确定对象(例如视图)是系统对象还是用户对象。这可能吗?

我正在使用SAP ASE 16.0。

由于

2 个答案:

答案 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_,并且您需要检查它是否存在于sybsystemprocsmaster中,以确定它是否为系统过程