Почему некоторые системные таблицы определены как «поддельные таблицы» с помощью ObjectProperty TableIsFake? - PullRequest
4 голосов
/ 06 мая 2011

Сегодня я просматривал список 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?

Ответы [ 2 ]

4 голосов
/ 09 мая 2011

Поддельная таблица - это специальная структура "в памяти" без сохранения на диске.SQL Server создает его по требованию.

Наилучшим примером являются sysprocesses.

ИМХО: ключ находится «на постоянстве диска»:

  • sysusers или sysxlogins (дляпример) являются реальными таблицами в каждом db / master соответственно и выживают при резервном копировании / восстановлении
  • sysprocesses или sysfiles не выживут при резервном копировании / восстановлении, поскольку нет ничего для записи или чтения на диск
1 голос
/ 06 мая 2011

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

Так что вместо sysfiles вы должны использовать sys.database_files

...