В какой базе данных хранятся sys.tables или sys.indexes в SQL Server? - PullRequest
0 голосов
/ 12 марта 2019

Я не могу понять, где хранятся эти системные таблицы, ваша помощь будет высоко оценена.

Ответы [ 2 ]

3 голосов
/ 12 марта 2019

Это просмотры.

Определения представлений хранятся в скрытой базе данных ресурсов , но они имеют доступ к системным базовым таблицам , хранящимся в каждой отдельной базе данных.

Вы можете использовать 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)))

Но системные базовые таблицы не могут быть запрошены напрямую, кроме как через ЦАП, поэтому эту информацию редко полезно знать.

0 голосов
/ 12 марта 2019

Все объекты sys хранятся в базе данных ресурсов и логически видны под схемой sys каждой базы данных.

Пример:

Select * from Database.sys.sysaltfiles даст вам результаты, несмотря на то, что это представление отсутствует в этой базе данных.

...