为什么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
答案 0 :(得分:3)
它们没有重复。
SQL Server根据需要将sys架构正确解析为数据库或服务器:
USE MyDB
GO
SELECT * FROM sys.server_permissions -- <. always from master db
这个简单,在日常实际水平上毫无用处......
编辑:在Martin Smith的评论之后,from MSDN