是Sybase {ASE}使用“schema.table”还是“表”
ALL,是Sybase {ASE}使用“schema.table”还是“表”
标题几乎说明了一切。我正在寻找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 where。 uid = su.uid AND t.object_id = so.id AND t.schema_id = s.schema_id AND s.name =?AND so.name =?;“
现在随着Sybase随处可见,查询检索表的所有者不会引用模式名只有表名。这是否意味着Sybase所有者不能更改表所有者?或者它是可改变的,但是模式也会改变?
有人可以请一些光吗?
它的工作方式与MS SQL Server中的相同。您可以使用schema.object
。 如果使用object
然后搜索对象:在我们的模式在dbo
模式
- 第一
- 然后
您还可以使用database.owner.object
符号或database..object
符号时,店主dbo
或事件连接外部ASE服务器时使用server.database.owner.object
表示法。
在Sybase/SAP ASE中,所有表都有一个所有者;这个所有者和模式实际上是一样的。
链接你提到指向sysobjects(系统)表,它存在于每个数据库中。 sysobjects包含数据库中所有对象(例如,表,proc,触发器,视图等)的一些高级元数据。对象的名称(例如,表的名字,一个进程的名字)
-
名
两列对象所有者的ID
所有系统表都在sysobjects中有条目与uid = 1,它指数据库所有者(即,user_name(1)= dbo)。
在大多数环境中,它典型的数据库所有者(DBO )也拥有数据库中的大多数其他对象(即,最系统对象行具有的uid = 1)。
如果一个对象被dbo以外的其他人所拥有,则sysobjects行将具有uid = user_id('non_dbo_owner_name');例如,如果bob的数据库用户标识(uid)是47,则bob拥有的任何对象将具有sysobjects.uid = 47。
当你引用一个表没有所有者/架构名称(例如,select * from tab1
),日月光将首先查找您所拥有的对象(即你拥有一个名为“TAB1”表),如果没有找到这样的表,那么它会查找dbo拥有的表(即'dbo.tab1'是否存在?)。
当您引用附有所有者/模式名称的表时,ASE只会查找该表的存在。
如果你没有自己的名为 'TAB1' 表,则以下是等价的:
- SELECT * FROM TAB1
- SELECT * FROM dbo.tab1
针对更新的问题:
Sybase/SAP ASE不支持更改对象的所有者。
作为查找表的所有者(S)/模式(S),你有几个选择:
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'
问题更多信息更新。你能澄清吗?此外,如果Sybase是“schemaName.tableName”,那么我可以在哪里获取模式名称? – Igor