【问题标题】:"Invalid object name" after restoring SQL Server 2008 database还原 SQL Server 2008 数据库后出现“无效的对象名称”
【发布时间】:2011-10-06 09:22:05
【问题描述】:

我正在切换我的网络主机并备份我的数据库。由于我的新主机的一些限制,我无法恢复 .bak 文件,不得不发送给他们以便他们恢复它。一旦他们恢复它,我运行我的应用程序我得到了这个

System.Data.SqlClient.SqlException: Invalid object name "<table name>"

每当我尝试从应用程序查询表时。但是,我通过管理工作室使用相同的用户名和密码登录并查询表没有问题。

我正在使用 SQL Server 2008 运行 mvc 3 站点

有谁知道为什么我在尝试运行我的应用程序时可能会遇到这些异常?

编辑:

更多信息:

我在旧数据库中使用的用户名是 Kimpo54321,所以我创建的所有表都有这样的前缀 Kimpo54321。所以我尝试将它添加到我的网络应用程序中的第一个查询中,因此它将是 SELECT * FROM Kimpo54321.<tablename> 并且查询无异常通过。

现在我不必在之前的应用程序中为每个表名添加前缀,并且我不想将它应用于我的所有查询。有没有办法解决这个问题?

编辑:

我运行它来为每个表获取一个更改模式行,并将所有内容更改为dbo,它终于可以工作了。 thnx aaron 为我指明了正确的方向并找到了答案

SELECT 'ALTER SCHEMA dbo TRANSFER ' + s.Name + '.' + o.Name 
    FROM sys.Objects o 
    INNER JOIN sys.Schemas s on o.schema_id = s.schema_id 
    WHERE s.Name = 'yourschema'
    And (o.Type = 'U' Or o.Type = 'P' Or o.Type = 'V')

【问题讨论】:

    标签: asp.net sql-server sql-server-2008 exception invalid-object-name


    【解决方案1】:

    您是否引用了架构(例如 dbo.table 与 table)?新主机上的用户可能与旧主机上的用户具有不同的默认架构。您如何“查询表” - 右键单击​​并选择其中一个选项,或者使用应用程序发出的完全相同的查询?

    【讨论】:

    • 是的,在发布您的答案时正在编辑我的问题。现在一切都开始变得有意义了,我只是右键单击管理工作室中的一个表,选择前 1000 个,实际上它以旧模式 (kimpo54321) 作为表名的前缀。我尝试在管理工作室的菜单树中单击登录文件夹,然后试图在用户映射中添加 kimpo54321 模式。我收到一条错误消息“无法更改用户 dbo”,当我尝试添加两种模式时,没有任何反应,默认模式仍然是 dbo。如何更改?
    【解决方案2】:

    这可能是需要将 Web 应用的用户重新添加到恢复的数据库的问题。当数据库恢复到不同的 sql 服务器时,某些用户不会维护他们的权限。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-04
      • 2010-12-17
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 2014-01-21
      • 1970-01-01
      • 2014-03-13
      相关资源
      最近更新 更多