2015-03-30 79 views
0

我被要求在旧的asp-classic应用程序中进行一些更改。生产服务器和服务器用于测试和开发20多台路由器,而我的打字和看到这种类型之间的时间间隔是非常可怕的。所以我在这里设置了一台服务器,就像安装了MS SQL Server 2008 R2的他们(MS Server 2008)一样。我以为我配置我的数据库就像他们的。他们有几百行数千行的旧脚本。如何在MS SQL Server 2008 R2中不使用完全限定的表名称

我备份了远程端的测试数据库,将它复制到我的服务器并在那里恢复。我复制了他们已经结束的剧本。网站已启动并正在运行。但是,任何需要查询数据库的东西都会产生错误“无效的对象名称atable”。查看它们的代码并且没有任何地方有完全限定的名称。我登录到远程服务器启动Management Studio我问他们是否可以更改所有的代码来使用完全限定的名字,答案是否定的,我问他们是如何配置数据库的,答案是前者(他们喜欢它)

所以我的问题;是否有在MS SQL Server 2008默认不使用完全限定名称的配置选项?他们如何避免不使用数据库,所有者,他们的代码中的模式?我作为应用程序用户登录,似乎也不帮助。

请,我知道我们应该使用完全合格的名称作为最佳实践。我读过关于绩效收益/损失的评论。当您自动编写脚本创建数据库脚本时,他们的数据库实例使用模式名称。如果我使用该模式名称来为表名称加上前缀,那么一切都很好。他们只是不希望我在编辑或为他们创建的任何脚本中这样做。

+0

当您将用户更改为全部具有相同的默认模式(dbo,我假设所有这些对象都存在)时会发生什么?由于你指出的原因,它仍然会很糟糕,但至少没有人需要纠正他们的代码。 2015-03-30 20:56:56

+0

只有一个用户。他们的应用程序页面使用该用户标识登录。 – Madcowtricks 2015-03-30 21:02:14

+0

糟糕,点击“添加评论”的速度太快。这些表由该用户拥有,并且模式名称与用户的名称相匹配。 – Madcowtricks 2015-03-30 21:03:33

回答

0

未指定对象的分辨率顺序(select * from table1)是sys,然后是用户的默认模式,然后是最终的dbo。因此,SQL Server(给定数据库上下文)将在sys模式中查找table1,然后查找指定的模式(可能是dbo),最后是dbo。只要一切都在dbo(这是非常糟糕的做法,但你坚持),一切都会被发现。它就像使用一个房间来存储一切。

我曾经为一位非常聪明的经理工作,他支持很多数据库,这使得它将所有对象标识为三个部分名称-databasename.schema.object,但我知道微软打算停止支持这种类型的未来的名字解析。但至少它非常常见,以查看脚本中所有对象的schema_name.object_name。