我们正在将数据库从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中选择某些内容时会出现无效对象错误(abc.blah正常工作)。
当然,它不应该以这种方式编码开始,但这是一场不同的战斗。我已经确认权限不是问题。
我确信其他人已经碰到了这个。有没有人找到解决方法而不是修复代码?
答案 0 :(得分:2)
这里没有太多的魔力;修复代码。
假设您在两个模式中都没有相同名称的对象,您可以创建一系列同义词,如:
CREATE SYNONYM xyz.foo FOR dbo.foo;
......但这与修复代码一样糟糕。