SAP 等同于 IsMSShipped(即是一个系统对象)
SAP equivalent of IsMSShipped (ie, is a system object)
我想知道如何确定一个对象(例如视图)是系统对象还是用户对象。这可能吗?
我正在使用 SAP ASE 16.0。
谢谢
您可以检查 sysobjects
for type = "U" for user objects,或 type = "S" for system objects。
select name, type from sysobjects
where type = "U"
select name, type from sysobjects
where type = "S"
type
的其他典型值是:
U
= 用户对象
S
= 系统对象
RI
= 约束
D
=默认
R
=规则
TR
=触发器
P
=程序
对于视图和其他非 table 对象(过程除外),SAP ASE 使用 sys
作为名称前缀。对于过程,SAP ASE 在它们前面加上 sp_
或 mon_
前缀,您需要检查它是否存在于 sybsystemprocs
或 master
中以确定它是否是系统过程.
从技术上讲,系统对象是那些 sysobjects.id < 256 的对象。这些对象大多只是预定义的系统表,不受 DBA 的影响。这些有sysobjects.type='S'。
这不包括 'system' 视图(如 sysquerymetrics)和系统存储过程,如 sp_help 等,这些实际上是在 installmaster 脚本(及其表兄弟)是 运行,因此它们的对象 ID > 255 和对象类型 <> 'S'.
没有什么能阻止您在 sybsystemprocs 中创建您自己的 'sp_' 过程(这样做有很多充分的理由),因此您无法通过 'sp_' 前缀判断某些东西是否是系统存储的是否触发。
所以基本上,除了真正的系统表之外,没有任何无懈可击的方法来测试它。您当然可以构建自己的函数来检查这一点,其中可能包括由 installmaster 脚本创建的所有过程的列表,但这听起来像是一个非常繁重的解决方案。
我想知道如何确定一个对象(例如视图)是系统对象还是用户对象。这可能吗?
我正在使用 SAP ASE 16.0。
谢谢
您可以检查 sysobjects
for type = "U" for user objects,或 type = "S" for system objects。
select name, type from sysobjects
where type = "U"
select name, type from sysobjects
where type = "S"
type
的其他典型值是:
U
= 用户对象
S
= 系统对象
RI
= 约束
D
=默认
R
=规则
TR
=触发器
P
=程序
对于视图和其他非 table 对象(过程除外),SAP ASE 使用 sys
作为名称前缀。对于过程,SAP ASE 在它们前面加上 sp_
或 mon_
前缀,您需要检查它是否存在于 sybsystemprocs
或 master
中以确定它是否是系统过程.
从技术上讲,系统对象是那些 sysobjects.id < 256 的对象。这些对象大多只是预定义的系统表,不受 DBA 的影响。这些有sysobjects.type='S'。
这不包括 'system' 视图(如 sysquerymetrics)和系统存储过程,如 sp_help 等,这些实际上是在 installmaster 脚本(及其表兄弟)是 运行,因此它们的对象 ID > 255 和对象类型 <> 'S'.
没有什么能阻止您在 sybsystemprocs 中创建您自己的 'sp_' 过程(这样做有很多充分的理由),因此您无法通过 'sp_' 前缀判断某些东西是否是系统存储的是否触发。
所以基本上,除了真正的系统表之外,没有任何无懈可击的方法来测试它。您当然可以构建自己的函数来检查这一点,其中可能包括由 installmaster 脚本创建的所有过程的列表,但这听起来像是一个非常繁重的解决方案。