gkr*_*ers 74
在SQL Server上,这将列出指定表的所有索引:
select * from sys.indexes
where object_id = (select object_id from sys.objects where name = 'MYTABLE')
Run Code Online (Sandbox Code Playgroud)
此查询将列出没有索引的所有表:
SELECT name
FROM sys.tables
WHERE OBJECTPROPERTY(object_id,'IsIndexed') = 0
Run Code Online (Sandbox Code Playgroud)
这是一个有趣的MSDN常见问题解答,涉及相关主题:
查询SQL Server系统目录常见问题解答
大多数现代RDBMS都支持该INFORMATION_SCHEMA模式.如果你支持,那么你想要INFORMATION_SCHEMA.TABLE_CONSTRAINTS或者INFORMATION_SCHEMA.KEY_COLUMN_USAGE,或者两者兼而有之.
要查看您的支持,就像运行一样简单
select count(*) from INFORMATION_SCHEMA.TABLE_CONSTRAINTS
编辑:SQL Server确实有INFORMATION_SCHEMA,并且它比供应商特定的表更容易使用,所以只需使用它.
以下是我用于 TSQL 的内容,它解决了我的表名可能包含架构名称以及可能包含数据库名称的问题:
DECLARE @THETABLE varchar(100);
SET @THETABLE = 'theschema.thetable';
select i.*
from sys.indexes i
where i.object_id = OBJECT_ID(@THETABLE)
and i.name is not NULL;
Run Code Online (Sandbox Code Playgroud)
其用例是我想要指定表的索引列表,以便我可以编写一个过程来动态压缩表上的所有索引。