我有同名的表和视图:“ dbo.Users”(表)和“ www.Users”(表)。整个代码中都有select
条语句,如下所示:
SELECT u_id, u_name from Users WHERE ...
我检查了两个不同的用户,似乎在两种情况下都使用了视图。处理此案的确切规则是什么?我尝试寻找name binding
,name search order
和类似的文件,但是找不到文档中的任何结论。
使用的默认架构由用户的“默认架构”属性控制。
您可以从CREATE USER
文档中阅读:
默认模式将是服务器为该数据库用户解析对象名称时将搜索的第一个模式。[...]
当没有为用户指定默认架构时,还有更多其他事情:
如果用户具有默认架构,则将使用该默认架构。如果用户没有默认架构,但是该用户是具有默认架构的组的成员,则将使用该组的默认架构。如果用户没有默认架构,并且是多个组的成员,则该用户的默认架构将是具有最低Principal_id和显式设置的默认架构的Windows组的默认架构。 (不可能明确选择可用的默认模式之一作为首选模式。)如果无法为用户确定默认模式,则将使用dbo模式。
为了避免发生类似的情况,请始终通过为查询中引用的数据库对象指定架构来明确显示。