我在看今天的ObjectProperty
列表,並遇到財產TableIsFake
。這個名字使我感到好笑,所以我看着它檢查什麼:爲什麼使用「TableIsFake」ObjectProperty將某些系統表確定爲「假表」?
這張表是不是真的。它由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
?
有道理,但任何想法,爲什麼'USE主; SELECT OBJECTPROPERTY(OBJECT_ID('sysprocesses'),N'TableIsFake')'返回NULL而不是'1'? – 2011-05-10 17:07:57
@Martin:sysprocesses是一個兼容性視圖... – gbn 2011-05-10 18:02:40