检查的第一个模式是什么?

yru*_*hka 5 sql-server-2005 sql-server-2008

我现在有点困惑。有人可以用一个简单的答案来回答我这个问题。

我有一个用户 [user_test],并为一个数据库 [database_test] 分配了 [db_owner] 角色。用户的默认架构是 [user_test] 并且几乎所有来自 [database_test] 的对象都是在架构 [user_test] 下创建的。在数据库中还存在 3 个具有架构 [dbo] 的对象

用户对两种模式都有权限:[dbo] 和 [user_test],无需在对象引用前面的 select 语句中明确指定它们。

当用户 [user_test] 调用对象时,SQL 检查的第一个模式是什么?

我的意思是,如果 [user_test] 从 dbo 模式中选择一个对象(前面没有模式),SQL 会先检查它指定的默认模式,然后再检查 dbo 吗?

谢谢,

And*_*ton 7

对于 SQL Server 2005 和 2008,搜索的第一个架构是用户默认架构。

来自SQL Server 最佳实践 - 数据库对象架构的实现

默认架构

可以使用默认模式定义用户。默认模式是在解析其引用的对象名称时搜索的第一个模式。

在 dbo 模式中创建基表将使表对象能够在没有显式模式名称的情况下被引用。这是因为将通过首先搜索默认架构,然后是 dbo 架构来定位对象。所以:

SELECT * FROM Table1

将首先评估以下陈述:

SELECT * FROM <defaultschema>.Table1

如果找不到对象,服务器将评估以下语句:

SELECT * FROM dbo.Table1

评估过程可以通过使用前面描述的完全限定名称或 DEFAULT_SCHEMA 选项来改进。通过为用户设置 DEFAULT_SCHEMA 的值,服务器将首先检查 DEFAULT_SCHEMA,消除不必要的所有权检查过程。

这可以在大量使用的系统上显着提高性能。

SQL Server 2005升级到 SQL Server 2005 和 DEFAULT_SCHEMA 设置中引入了默认架构