Это просмотры.
Определения представлений хранятся в скрытой базе данных ресурсов , но они имеют доступ к системным базовым таблицам , хранящимся в каждой отдельной базе данных.
Вы можете использовать sp_helptext
, чтобы увидеть определение sys.indexes
(и что оно обращается к sys.sysidxstats
, sys.syssingleobjrefs
, sys.syspalvalues
), но попытка сделать это с помощью sys.objects
просто показывает SELECT
против sys.objects$
.
Если вы просматриваете план выполнения для выбора против sys.objects
, вы можете увидеть объекты, к которым вы получили доступ.
|--Hash Match(Right Outer Join, HASH:([n].[value])=([o].[type]), RESIDUAL:([mssqlsystemresource].[sys].[syspalnames].[value] as [n].[value]=[foo].[sys].[sysschobjs].[type] as [o].[type]))
|--Clustered Index Seek(OBJECT:([mssqlsystemresource].[sys].[syspalnames].[cl] AS [n]), SEEK:([n].[class]='OBTY') ORDERED FORWARD)
|--Hash Match(Right Outer Join, HASH:([r].[depid])=([o].[id]))
|--Index Scan(OBJECT:([foo].[sys].[syssingleobjrefs].[nc1] AS [r]), WHERE:([foo].[sys].[syssingleobjrefs].[class] as [r].[class]=(97) AND [foo].[sys].[syssingleobjrefs].[depsubid] as [r].[depsubid]=(0)))
|--Filter(WHERE:(has_access('CO',[foo].[sys].[sysschobjs].[id] as [o].[id])=(1)))
|--Compute Scalar(DEFINE:([Expr1006]=CONVERT(bit,[foo].[sys].[sysschobjs].[status] as [o].[status]&(1),0), [Expr1009]=CONVERT(bit,[foo].[sys].[sysschobjs].[status] as [o].[status]&(16),0), [Expr1010]=CONVERT(bit,[foo].[sys].[sysschobjs].[status] as [o].[status]&(64),0)))
|--Clustered Index Scan(OBJECT:([foo].[sys].[sysschobjs].[clst] AS [o]), WHERE:([foo].[sys].[sysschobjs].[nsclass] as [o].[nsclass]=(0) AND [foo].[sys].[sysschobjs].[pclass] as [o].[pclass]=(1)))
Но системные базовые таблицы не могут быть запрошены напрямую, кроме как через ЦАП, поэтому эту информацию редко полезно знать.