1

我被要求对旧的 asp-classic 应用程序进行一些更改。生产服务器和他们用于测试和开发的服务器或 20 多个路由器之外的服务器以及我打字和看到类型之间的延迟时间是可怕的。所以我在这里设置了一个服务器,就像他们的(MS Server 2008)安装了MS SQL Server 2008 R2。我以为我像他们一样配置了我的数据库。他们有成千上万行的旧 vbscript。

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

所以我的问题;MS SQL Server 2008 中是否有默认不使用完全限定名称的配置选项?他们怎么能在代码中不使用数据库、所有者、模式?我以应用程序用户身份登录,这似乎也无济于事。

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

4

1 回答 1

0

未指定的对象的解析顺序(从 table1 中选择 *)是 sys,然后是用户的默认架构,最后是 dbo。因此 SQL Server(给定数据库上下文)将在 sys 架构中查找 table1,然后是分配的架构(可能是也可能不是 dbo),最后是 dbo。只要一切都在 dbo 中(这是非常糟糕的做法,但你坚持这样做)一切都会找到。就像用一个房间来存放所有东西一样。

我曾为一位非常精明的经理工作过,他支持许多数据库,他习惯于将他的所有对象识别为三个部分名称 -databasename.schema.object 但我知道微软打算停止支持这种类型的名称解析未来。但至少在脚本中看到所有对象的 schema_name.object_name 是非常普遍的。

于 2015-03-30T21:02:07.723 回答