【发布时间】:2019-07-01 09:21:37
【问题描述】:
This 链接包含问题的答案,但未完成。
Sybase DBMS 具有目录和模式的概念。那么,如何编写查询来检索目录内架构内的表的索引列表?
[编辑]
考虑以下场景:
USE test
GO
CREATE TABLE dbo.test_table(<field_list>)
GO
CREATE TABLE foo.test_table(<field_list>)
GO
CREATE INDEX test_index ON test_table(<index_field_list>)
GO
如您所见,创建了 2 个 test_table 表:一个在名为 dbo 的模式中,一个在名为 foo 的模式中。所以现在我的问题是 - 我如何编写一个查询来正确检查模式 foo 中表 test_table 上的索引是否存在?因为我引用的链接没有区分这两个表,因此在这种情况下会失败。我非常喜欢过滤模式和表名,而不是使用schemaName.tableName 格式。我希望你有一个想法。如果不是,请告诉我,我会尝试更详细地解释。
[/编辑]
【问题讨论】:
-
请解释一下不完整的地方?另一个问题是关于 Sybase/SAP Adaptive Server Enterprise (ASE)。也许您想询问有关 Sybase/SAP SQL Anywhere 的信息?在 ASE 中,没有目录之类的东西。有数据库,然后是所有者(模式)和对象名称。
-
哪种 Sybase (RDBMS) 产品(ASE?SQLAnywhere?IQ?Advantage?)?如果您使用的是 ASE,请查看
sp_helpindex存储过程的源代码,用于在sysobjects(表)、syspartitions(表/索引分区)、sysindexes(索引)和@987654328 之间进行连接@(构成索引的列)。其他数据库将具有类似的系统(也称为目录)表,用于获取有关索引的信息。 -
@AdamLeszczyński,我想为特定目录(数据库)内的某个特定用户(在特定架构内)拥有的表拥有所有索引?我确实谈到了 ASE。概念就在那里——只是名称不同。即,目录 = 数据库和架构 = 所有者。
-
@AdamLeszczyński,除非我不能在一个数据库中创建这样的表:
USE foo && CREATE TABLE dbo.test(...) && CREATE TABLE bar.test(...)?或者我可以吗?因为如果可以的话,那两张表可以有完全不同的索引集。甚至更好 - 使用sa用户连接到一个数据库,在同一服务器中使用sa用户连接到另一个数据库,并查询表bar以获取索引。这就是为什么我要过滤目录和架构的查询。 -
@markp,看我上面的回复