Сегодня я просматривал список ObjectProperty
и наткнулся на свойство TableIsFake
.Имя меня позабавило, поэтому я посмотрел на то, что оно проверяет:
Таблица не настоящая.Он реализуется внутренне по требованию SQL Server.
Что именно это значит?Например, когда я запускаю следующий запрос:
SELECT [name], xtype
FROM dbo.sysobjects
WHERE OBJECTPROPERTY(object_id([name]), N'TableIsFake') = 1
ORDER BY [name]
, я получаю следующие результаты:
name xtype
-------------- -----
sysfiles S
sysforeignkeys S
sysindexkeys S
sysmembers S
sysprotects S
Но если я запрашиваю в базе данных системные таблицы:
SELECT [name], xtype
FROM dbo.sysobjects
WHERE xtype = 'S'
ORDER BY [name]
Я получаю следующие системные таблицы:
name xtype
------------------- -----
syscolumns S
syscomments S
sysdepends S
sysfilegroups S
sysfiles S
sysfiles1 S
sysforeignkeys S
sysfulltextcatalogs S
sysfulltextnotify S
sysindexes S
sysindexkeys S
sysmembers S
sysobjects S
syspermissions S
sysproperties S
sysprotects S
sysreferences S
systypes S
sysusers S
Что делает sysfiles
, sysforeignkeys
, sysindexkeys
, sysmembers
, sysprotects
системными таблицами "фальшивыми"?Или, другими словами, что означает, что они «материализованы внутренне по требованию SQL Server»?Означает ли это, что они создаются только тогда, когда процессу это необходимо, или если я называю что-то вроде SELECT * FROM sysfiles
?