为什么系统视图重复到用户数据库?

时间:2010-10-02 10:51:30

标签: sql-server architecture configuration terminology code-reuse

为什么SQL Server会将数百个系统视图从模型数据库复制到每个用户定义的数据库中,而不是将它们集中存储(例如,因为它保留服务器对象)并在询问时将其用于特定数据库的特定上下文中需要?

不是它们(例如,系统视图的定义/脚本)在数据库之间是通用的吗?


更新:

我仍然无法得到它:
1)
为了在另一个数据库的上下文中执行视图,不需要将视图定义复制到每个数据库中(只需提取视图def并在特定数据库的上下文中执行)。
那么,为什么要复制副本呢? 2)
然后,我仍然困惑什么存储在哪里?

[1](BOL2005 [1a] -2008R2 [1b])告诉:

  

“在SQL Server中,系统对象不再存储在主数据库中;而是,它们存储在资源数据库中

另外,我想了解为什么SSMS允许脚本服务器对象(例如,右键单击服务器对象下的对象资源管理器 - > syspolicy_server_trigger上的触发器 - >脚本服务器触发器作为...- - >)而对于例如,系统视图没有这种可能性。

是什么让他们与众不同?他们在哪里,存储?


引:
[1]主数据库
[1A]
(SQL Server 2008 R2联机丛书)
http://msdn.microsoft.com/en-us/library/ms187837.aspx
[1B]
(SQL Server 2005联机丛书)
http://msdn.microsoft.com/en-us/library/ms187837(v=SQL.90).aspx

1 个答案:

答案 0 :(得分:3)

它们没有重复。

    存储
  • sys.objects和sys.database_principals,因为它们是特定于数据库的
  • sys.server_triggers或sys.server_permissions仅存在于主数据库的服务器级别

SQL Server根据需要将sys架构正确解析为数据库或服务器:

USE MyDB
GO
SELECT * FROM sys.server_permissions   --   <. always from master db 

这个简单,在日常实际水平上毫无用处......

编辑:在Martin Smith的评论之后,from MSDN