Jes*_*ber 3 sql-server-2008 sql-server
我们最近使用这个查询在我们的数据库中查找没有聚集索引的表,发现它返回的结果之一是“sys.sysfiles1”表。我们正在运行 SQL Server 2008,我的印象是该表不再使用(正如一些答案指出的那样,似乎存在一种误解,即该表仅存在于从 SQL Server 2000 升级的数据库)。此外,我无法直接从 sys.sysfiles1 表中选择任何内容(尽管我可以直接从 sys.sysfiles 视图中选择)。
运行以下命令以针对本地安装的 SQL Server 2008 (@@version = Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64),尽管我们已经在 SQL Server 的生产实例中看到它) 创建一个新数据库2008 年)也说明了我的意思:
CREATE DATABASE SysFilesTesting
--returns a row:
SELECT * FROM SysFilesTesting.sys.objects where name = 'sysfiles1'
--throws 'invalid object name' error:
SELECT * FROM SysFilesTesting.sys.sysfiles1
Run Code Online (Sandbox Code Playgroud)
为什么 sys.objects 报告 sysfiles1 表的存在?
有很多
SELECT * FROM sys.objects where name LIKE 'sys%'
Run Code Online (Sandbox Code Playgroud)
这些确实是您数据库中的对象 在
内部,其他有用的对象(例如 sys.objects)实际上并不存在于您的数据库中。
sysfiles1
是内部目录表。其中有很多(基本上,object_id 介于 1 和 99 之间的任何表,根据定义,都是内部目录表)。查询编译器拒绝在正常上下文下将查询绑定到它们,因此如果您尝试从它们中进行选择,则会出现您看到的错误。DAC 连接可以绑定到它们并检索数据,但您仍然无法更新它们。
这在 MSDN 上都有描述,请参阅System Base Tables。
sysfiles1
虽然是一种特殊情况,上面的链接中没有记录。此目录表仅存在于从 SQL 2000 升级的数据库中。见http://blogs.msdn.com/b/sqlserverstorageengine/archive/2006/09/19/761437.aspx:
... sysfiles1 表是一个链接堆。此表包含构成数据库的文件的位置...
归档时间: |
|
查看次数: |
1349 次 |
最近记录: |