ALL,
标题几乎说明了一切。我正在寻找here,但无法找到有关架构的任何信息。
有人可以请一些光吗?
我知道MS SQL Server使用" schema.name"引用数据库中的表,但对于Sybase,我不确定。
TIA!
编辑:
我想我应该更具体一点。
我知道在MS SQL Server中可以修改表所有者,但你仍然可以选择" SELECT su.name FROM sysobjects so sysusers su,sys.tables t,sys.schemas s WHERE so.uid = su.uid AND t.object_id = so.id AND t.schema_id = s.schema_id AND s.name =?和so.name =?;"
现在随着Sybase到处都是我查询查询表所有者不引用模式名称只有表名。这是否意味着表所有者在Sybase中不可更改?或者它是可更改的,但架构也会被更改?
有人可以解决一些问题吗?
答案 0 :(得分:1)
在Sybase / SAP ASE中,所有表都拥有所有者;这个所有者实际上与模式相同。
您提到的链接指向 sysobjects (系统)表,该表存在于每个数据库中。 sysobjects 包含数据库中所有对象(例如,表,过程,触发器,视图等)的一些高级元数据。
sysobjects 表
中感兴趣的两列所有系统表在 sysobjects 中都有一个条目 uid = 1 ,它引用数据库所有者(即 user_name(1)= dbo )。
在大多数环境中,数据库所有者( dbo )通常也拥有数据库中的大多数其他对象(即,大多数 sysobjects 行具有 uid = 1 )。
如果某个对象由dbo以外的其他人拥有,则 sysobjects 行将具有uid = user_id('non_dbo_owner_name');例如,如果bob的数据库用户ID(uid)为47,那么bob拥有的任何对象都将具有 sysobjects.uid = 47 。
当您引用没有所有者/模式名称的表(例如,select * from tab1
)时,ASE将首先查找您拥有的对象(即,您是否拥有名为“tab1”的表),如果它找不到这样的表然后它查找dbo拥有的表(即'dbo.tab1'存在吗?)。
当您引用附加了所有者/模式名称的表时,ASE将只查找该表的存在。
如果您没有名为“tab1”的表,则以下内容是等效的:
回应更新的问题:
Sybase / SAP ASE不支持更改对象的所有者。
至于查找表的所有者/架构,你有几个选择:
select u.name as 'owner_name',
o.name as 'table_name'
from sysobjects o,
sysusers u
where o.uid = u.uid
and o.name = '<name_of_table>'
and o.type = 'U'
-- or
select user_name(o.uid) as 'owner_name',
o.name as 'table_name'
from sysobjects o
where o.name = '<name_of_table>'
and o.type = 'U'
答案 1 :(得分:0)
它的工作方式与MS SQL Server相同。您可以使用schema.object
。
如果您使用object
,则会搜索该对象:
dbo
架构当您连接外部ASE服务器时,如果所有者为database.owner.object
或事件database..object
表示法,您还可以使用dbo
表示法或server.database.owner.object
表示法。