2017-08-09 285 views
0

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所有者不能更改表所有者?或者它是可改变的,但是模式也会改变?

有人可以请一些光吗?

回答

0

它的工作方式与MS SQL Server中的相同。您可以使用schema.object。 如果使用object然后搜索对象:在我们的模式在dbo模式

  • 第一
  • 然后

您还可以使用database.owner.object符号或database..object符号时,店主dbo或事件连接外部ASE服务器时使用server.database.owner.object表示法。

+0

问题更多信息更新。你能澄清吗?此外,如果Sybase是“schemaName.tableName”,那么我可以在哪里获取模式名称? – Igor

1

在Sybase/SAP ASE中,所有表都有一个所有者;这个所有者和模式实际上是一样的。

链接你提到指向sysobjects(系统)表,它存在于每个数据库中。 sysobjects包含数据库中所有对象(例如,表,proc,触发器,视图等)的一些高级元数据。对象的名称(例如,表的名字,一个进程的名字)

  • UID:数据库用户在系统对象的兴趣

    • 两列对象所有者的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' 
    
  • +0

    问题更新与上下文。现在我的问题是:我在哪里可以得到包含该表的模式? – Igor

    +0

    因此在Sybase/SAP ASE“schema_name”=“table_owner_name”中,您无法更改此设置,对吗? – Igor

    +0

    这是正确的 – markp