Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是Sybase{ASE}使用的;schema.table";或者只是;表「;_Sybase_Sap Ase - Fatal编程技术网

是Sybase{ASE}使用的;schema.table";或者只是;表「;

是Sybase{ASE}使用的;schema.table";或者只是;表「;,sybase,sap-ase,Sybase,Sap Ase,全部, 标题几乎说明了一切。我正在查找,但找不到有关架构的任何信息 谁能给我点光吗 我知道MS SQL Server使用“schema.name”来引用数据库中的表,但对于Sybase我不确定 蒂亚 编辑: 我想我应该更具体一点 我知道在MS SQL Server中可以修改表所有者,但您仍然可以使用“从sysobjects so、sysusers su、sys.tables t、sys.schemas s中选择su.name,其中so.uid=su.uid和t.object_id=so.id和

全部,

标题几乎说明了一切。我正在查找,但找不到有关架构的任何信息

谁能给我点光吗

我知道MS SQL Server使用“schema.name”来引用数据库中的表,但对于Sybase我不确定

蒂亚


编辑:

我想我应该更具体一点

我知道在MS SQL Server中可以修改表所有者,但您仍然可以使用“从sysobjects so、sysusers su、sys.tables t、sys.schemas s中选择su.name,其中so.uid=su.uid和t.object_id=so.id和t.schema_id=s.schema_id和s.name=?和so.name=?;”

现在,使用Sybase everywhere,我查看检索表所有者的查询,它不引用模式名,而只引用表名。这是否意味着Sybase中的表所有者不可更改?或者它是可变的,但是模式也会改变


有人能解释一下吗?

它的工作原理与MS SQL Server相同。您可以使用
schema.object
。 如果使用
对象
,则会搜索该对象:

  • 首先在我们的模式中
  • 然后在
    dbo
    schema中

当owner为
dbo
或event
server.database.owner.object连接外部ASE服务器时,也可以使用
database.owner.object
表示法或
database.object
表示法。在Sybase/SAP ASE中,所有表都有所有者;此所有者实际上与模式相同

您提到的链接指向sysobjects(system)表,它存在于每个数据库中。sysobjects包含数据库中所有对象(例如表、过程、触发器、视图等)的一些高级元数据

sysobjects表中的两列

  • 名称:对象的名称(例如,表的名称、过程的名称)
  • uid:对象所有者的数据库用户id
所有系统表在sysobjects中都有一个uid=1的条目,它表示数据库所有者(即user_name(1)=dbo)

在大多数环境中,数据库所有者(dbo)通常也拥有数据库中的大多数其他对象(即,大多数sysobjects行的uid=1)

如果对象由dbo以外的人拥有,sysobjects行的uid=user\u id('non\u dbo\u owner\u name');例如,如果bob的数据库用户id(uid)为47,则bob拥有的任何对象都将具有sysobjects.uid=47


当您引用一个没有所有者/模式名称的表(例如,
select*from tab1
)时,ASE将首先查找您拥有的对象(即,您是否拥有名为“tab1”的表),如果找不到这样的表,它将查找dbo拥有的表(即,“dbo.tab1”是否存在?)

当引用附加了所有者/架构名称的表时,ASE将只查找该表的存在

如果您没有名为“tab1”的表,则以下内容是等效的:

  • 从选项卡1中选择*
  • 从dbo.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'
选择u.name作为“所有者名称”,
o、 名称为“表名称”
从syso,
系统用户
其中o.uid=u.uid
和o.name=''
和o.type='U'
--或
选择用户名(o.uid)作为“所有者名称”,
o、 名称为“表名称”
从syso对象
其中o.name=“”
和o.type='U'

问题更新了更多信息。你能澄清一下吗?此外,如果Sybase是“schemaName.tableName”,我在哪里可以得到模式名?问题会随着上下文更新。现在我的问题是:我在哪里可以获得表所包含的模式?因此在Sybase/SAP ASE中“schema_name”=“table_owner_name”,您不能更改它,对吗?在PostgreSQL中,我可以从信息_schema.tables中选择table_catalog、table_schema、table_name,其中table_type='BASE table'或table_type='VIEW'。如何为Sybase/SAP ASE编写它?看来sysdatabases没有连接到sysobjects。或者是这样吗?1)不确定为什么要反对sysdatabases,2)是否尝试过运行我(上面)提供的查询?Sybase/SAP ASE的数据库名称=目录名称。和sysdatabases有一个数据库名称。所以,我要寻找的是为我的数据库获取catalog\u name、schema\u name和table\u name。除非我弄错了。