0

我有同名的表和视图:“dbo.Users”(表)和“www.Users”(表)。代码中的select语句如下所示:

SELECT u_id, u_name from Users WHERE ...

我检查了两个不同的用户,似乎在这两种情况下都使用了视图。管辖此案的具体规则是什么?我尝试寻找name binding,name search order和类似的,但无法在文档中找到任何结论性的东西。

4

1 回答 1

1

使用的默认架构由数据库用户的“默认架构”属性管理。

您可以从CREATE USER文档中阅读:

默认架构将是服务器在解析此数据库用户的对象名称时将搜索的第一个架构。[...]

当没有为用户指定默认模式时,还有更多内容:

如果用户有默认架构,则将使用该默认架构。如果用户没有默认架构,但用户是具有默认架构的组的成员,则将使用该组的默认架构。如果用户没有默认架构,并且是多个组的成员,则用户的默认架构将是具有最低 principal_id 和显式设置默认架构的 Windows 组的架构。(不可能明确地选择可用的默认模式之一作为首选模式。)如果无法为用户确定默认模式,则将使用 dbo 模式。


为避免发生这种情况,请始终明确指定您在查询中引用的数据库对象的架构。

于 2020-03-26T08:41:36.027 回答