如果我查询一个存在于两种不同模式中但具有相同名称的表,那么是什么决定了使用哪个表呢?
例如,如果我执行下面返回的语句,则表Bar同时存在于dbo和foo中:
SELECT * FROM Bar我认为这是由用户默认模式决定的,但似乎并非如此。
我之所以这样问是因为我发现了其他人编写的查询,这些查询没有指定模式名称,但是被查询的数据库在不同的ETL模式中拥有相同的表。
发布于 2016-12-03 12:42:27
根据网上图书的说法:
如果用户是sysadmin固定服务器角色的成员,则忽略DEFAULT_SCHEMA的值。sysadmin固定服务器角色的所有成员都具有dbo的默认架构。
因此,默认模式不起作用的帐户似乎是sysadmin角色成员。dbo用户的默认架构总是dbo,不能更改。
最佳实践通常是对对象引用进行模式限定,以避免歧义和提高性能。
https://dba.stackexchange.com/questions/157070
复制相似问题