Sql server 为什么将系统视图复制到用户数据库?
为什么SQL Server要将模型数据库中的一百个系统视图复制到每个用户定义的数据库中,而不是将它们集中起来(例如,因为它保留服务器对象,并在需要时在特定数据库的特定上下文中使用它们) 例如,数据库之间的系统视图的定义/脚本不是很常见吗 更新: 我还是不明白: 1. 为了在另一个数据库的上下文中执行视图,不需要将视图定义复制到每个数据库中,只需提取视图定义并在特定数据库的上下文中执行即可。 那么,为什么要对副本进行乘法呢? 2. 那么,我还不知道什么是存储在哪里 [1] BOL2005[1a]-2008R2[1b]告诉我们: 在SQL Server中,系统对象不再存储在主数据库中;相反,它们存储在资源数据库中 另外,我想了解为什么SSMS允许为例如编写服务器对象脚本,右键单击对象浏览器中syspolicy_server_trigger上的server objects->Triggers->script server trigger as…-->,而对于例如,系统视图没有这种可能性 是什么让他们与众不同?它们分别存放在哪里 引用: [1] 主数据库 [1a] SQL Server 2008 R2联机丛书 [1b] SQLServer2005联机丛书Sql server 为什么将系统视图复制到用户数据库?,sql-server,architecture,configuration,terminology,code-reuse,Sql Server,Architecture,Configuration,Terminology,Code Reuse,为什么SQL Server要将模型数据库中的一百个系统视图复制到每个用户定义的数据库中,而不是将它们集中起来(例如,因为它保留服务器对象,并在需要时在特定数据库的特定上下文中使用它们) 例如,数据库之间的系统视图的定义/脚本不是很常见吗 更新: 我还是不明白: 1. 为了在另一个数据库的上下文中执行视图,不需要将视图定义复制到每个数据库中,只需提取视图定义并在特定数据库的上下文中执行即可。 那么,为什么要对副本进行乘法呢? 2. 那么,我还不知道什么是存储在哪里 [1] BOL2005[1a]-
它们不是重复的 存储sys.objects和sys.database_主体是因为它们是特定于数据库的 sys.server_触发器或sys.server_权限仅存在于主数据库中的服务器级别 SQL Server根据需要将sys架构正确解析为数据库或服务器:
USE MyDB
GO
SELECT * FROM sys.server_permissions -- <. always from master db
它是如此简单,在实际的日常生活中毫无用处
编辑:在Martin Smith的评论之后,实际上来自mssqlsystemresource,而不是master。@Martin Smith:公共目录视图在master中,内部隐藏表在mssqlsystemresource中,无法访问。实际上是它的主人。与SQL Server 2000及其之前的版本不同,在masterI中确实有表,我复制了mssqlsystemresource的mdf,并将其作为一个新数据库附加。sys.server\权限在该副本中显示为用户视图。@Martin Smith:它仍然是有效的主权限,因为您不能使用资源数据库。请注意,此处它将成为用户视图而不是系统视图