如果未指定,则查询时 dbo 是默认架构吗?

mhe*_*all 3 sql-server sql-server-2008-r2

如果我查询存在于两个不同模式但具有相同名称的表,是什么决定了使用哪个表?

例如,我的表Bar同时存在于dbo和 中foo,如果我执行下面的语句,则返回一个:

SELECT * FROM Bar
Run Code Online (Sandbox Code Playgroud)

我认为这是由用户默认架构决定的,但似乎并非如此。

我问是因为我发现其他人编写的查询没有指定模式名称,但被查询的数据库在 ETL 的不同模式中具有相同的表。

Dan*_*man 6

根据在线书籍

如果用户是 sysadmin 固定服务器角色的成员,则忽略 DEFAULT_SCHEMA 的值。sysadmin 固定服务器角色的所有成员都具有 dbo 的默认架构。

因此,在默认架构不起作用的情况下使用的帐户似乎是 sysadmin 角色成员。dbo 用户的默认架构始终为 dbo 且无法更改。

最佳实践通常是对对象引用进行模式限定,以避免歧义并提高性能。