如果我查询存在于两个不同模式中但具有相同名称的表,那么什么决定了使用哪个表?
例如,我有Bar
一个同时存在于dbo
and中的表foo
,如果我执行下面的语句,则返回一个:
SELECT * FROM Bar
我认为这是由用户默认模式决定的,但似乎并非如此。
我问是因为我发现其他人编写的查询没有指定架构名称,但被查询的数据库在 ETL 的不同架构中具有相同的表。
如果我查询存在于两个不同模式中但具有相同名称的表,那么什么决定了使用哪个表?
例如,我有Bar
一个同时存在于dbo
and中的表foo
,如果我执行下面的语句,则返回一个:
SELECT * FROM Bar
我认为这是由用户默认模式决定的,但似乎并非如此。
我问是因为我发现其他人编写的查询没有指定架构名称,但被查询的数据库在 ETL 的不同架构中具有相同的表。
根据在线书籍:
因此,默认架构不起作用的情况下使用的帐户似乎是系统管理员角色成员。dbo 用户的默认架构始终为 dbo,并且无法更改。
最佳实践通常是模式限定对象引用以避免歧义并提高性能。