【发布时间】:2017-11-29 12:43:25
【问题描述】:
我们在安装时遇到问题,收到错误 "Invalid object name ..."。
它似乎没有使用 Windows 用户上设置的默认架构分配。
我在 AdventureWorks2012 数据库中设置了一个测试并收到相同的结果。
当我使用 Windows 帐户(在 AdventureWorks2012 数据库中设置默认模式“Person”)连接到实例并执行语句 SELECT * FROM Address 时,我收到相同的错误 Invalid object name Address。
接下来我创建了一个 SQL 登录,将登录映射到 AdventureWorks2012 数据库,并再次将默认模式设置为“Person”。当我使用 SQL 登录连接到实例,并执行命令SELECT * FROM Address 时,查询成功并返回结果。
我在 SQL 2012 和 SQL 2014 中都遇到了相同的结果。任何人都可以帮我解决为什么默认架构设置不适用于 Windows 用户吗?
【问题讨论】:
-
Windows 用户是否是系统管理员角色成员(即 SELECT USER 返回 'dbo')?
-
你真的不应该依赖默认模式。您应该始终在查询中指定架构。考虑一下如果默认模式在未来某个时候发生变化,将会做多少工作。
-
我赞同@SeanLange 所说的话。但我也喜欢一个很好的谜。有问题的 Windows 用户是否属于多个 Windows 组?如果是这样,他们很可能会从他们所属的其他组之一获取默认架构。
-
我尝试将用户作为服务器 sysadmin 角色的成员,但没有 sysadmin 角色的成员身份 - 结果没有任何区别。
-
至于“不依赖默认模式”语句 - 这是应用程序升级的一部分,我们无法控制它的编写方式。供应商允许客户创建他们想要的任何模式名称,使用该模式构建他们的对象,然后默认模式设置允许安装/升级过程定位对象。这是过去使用此过程的众多设置之一,也是我第一次遇到任何问题。我现在想知道在我们保持环境最新的情况下,累积更新是否引入了一些问题。
标签: sql-server schema default