【问题标题】:Invalid Object Name in mssql 2005mssql 2005 中的对象名称无效
【发布时间】:2012-09-06 22:57:17
【问题描述】:

我们目前的 MSSQL 2005 数据库存在问题。我们最近经历了从 windows server 2003 到 2008 的迁移。SQL Server 保持为 2005。我正在使用 SQL Server Management Studio 进行工作。

数据库中的所有表都遵循以下格式:[SCHEMA].[TABLE_NAME]

当我输入 SQL 时:

SELECT * FROM [table_name]

我收到错误消息:无效的对象名称“[table_name]”。

如果我输入:

SELECT * FROM [schema].[table_name]

这很好用。我们登录数据库时使用的用户名拥有所有表名前面的模式。

问题是,我们有第三方公司拥有从数据库导出数据的软件。 2 家公司现在尝试运行他们的出口商,但是收到错误“无效的对象名称”。该软件正在使用拥有该架构的用户名登录。

我的问题与我在互联网上找到的问题完全相同: http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=99802

但是,这个问题的答案似乎充满了关键字而不是实际的句子,这使得它很难理解。

如果有人可以提供帮助,将不胜感激。

非常感谢

菲尔

【问题讨论】:

  • 在创建和引用对象时始终使用模式前缀。总是。告诉您的第 3 方公司他们没有通过。 sqlblog.com/blogs/aaron_bertrand/archive/2009/10/11/…
  • @Aaron Bertrand 不幸的是需要这些导出程序。它们是我们组织的要求。在我们升级网络之前,即使没有架构前缀,它们也可以正常工作,但现在不行了。有没有办法在用户登录数据库时自动将默认模式添加到表中?

标签: sql-server-2005 schema


【解决方案1】:

将第 3 方用户名的默认架构设置为其无前缀引用应指向的架构:

ALTER USER foo WITH DEFAULT_SCHEMA = [bar];

(这与拥有架构不同。)

并告诉他们正确编写软件。在 SQL Server 中,您应该始终指定架构名称,即使您始终使用 dbo

【讨论】:

  • 感谢亚伦的回复。我已经执行了这个查询,但是当你输入一个不带前缀的表名时,它仍然会出现 Invalid Object Name。
  • 你确定你调整了用户连接的用户名?你检查过EXECUTE AS 没有被使用吗?您是否检查过该表所属的实际架构?顺便说一句,这些只是黑客行为。如果有人将其中一个表移动到不同的架构,您的应用程序将再次中断。 修复是停止接受来自第 3 方的废话。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-17
  • 2018-06-15
相关资源
最近更新 更多