2017-08-09 290 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