0

我们正在将数据库从 SQL Server 2000 迁移到 SQL Server 2008 R2,但我们的架构遇到了问题。在 SQL Server 2000 中,如果您没有在对象名称前加上所有者/模式(例如SELECT * FROM blah,而不是dbo.blah),SQL Server 仍然可以解决。即使您的对象在非 dbo 所有者中,这也有效。

在 SQL Server 2005 中,这已按此处所述进行了更改:http: //blogs.msdn.com/b/mssqlisv/archive/2007/03/23/upgrading-to-sql-server-2005-and-default-schema-setting .aspx

我可以通过使用户的默认模式 xyz 而不是 dbo 来绕过具有 2 个模式的数据库。我遇到的问题是在有第三个模式(abc.blah)的数据库中。当我将用户设置为默认 xyz 时,他们可以顺利进入 dbo,但在尝试从 abc 中选择不带架构前缀的内容时会出现 Invalid Object 错误(abc.blah 工作正常)。

当然,一开始就不应该这样编码,但那是一场不同的战斗。我已经验证权限不是问题。

我敢肯定,其他人也遇到过这种情况。有没有人找到除了修复代码之外的解决方法?

4

1 回答 1

2

这里没有太多的魔法。修复代码。

假设您在两个模式中都没有同名对象,您可以创建大量同义词,例如:

CREATE SYNONYM xyz.foo FOR dbo.foo;

...但这将与修复代码一样混乱。

于 2013-02-19T22:57:51.233 回答