【问题标题】:Table hiding in SQL Server database?表隐藏在 SQL Server 数据库中?
【发布时间】:2013-09-10 15:38:00
【问题描述】:

我突然将数据传输到表格中,遇到了我职业生涯中从未见过的疯狂问题。

消息 208,第 16 级,状态 1,第 1 行
对象名称“dbo.Table_Report”无效。

然后我尝试创建一个同名的表,但我再次遇到错误

消息 2714,第 16 级,状态 6,第 2 行
数据库中已经有一个名为“Table_Report”的对象。

出了什么问题我需要尽快将数据发送到表中,但我无法做到这一点,至少我无法删除表

无法删除表“Table_Report”,因为它不存在或您没有权限。

注意:我拥有数据库的管理员权限。

你们能看看是哪里出了问题吗?

【问题讨论】:

  • 如果我们能看到引发这些错误的代码,可能会更容易诊断。
  • 可能是具有该名称的视图。 select name, type_desc from sys.objects where name = 'Table_Report' 返回什么?
  • @a_horse_with_no_name - 我想不出你期望有一个表名的语句,而是给出了一个视图名,并且会产生第一个错误。它们应该大部分是可互换的。你有例子吗?
  • @Damien_The_Unbeliever create table foo (..) 如果存在名为 foo 的视图,将返回错误“已经有一个名为 'foo' 的对象”。尽管尝试删除它时会给出不同的错误...
  • @a_horse_with_no_name - 是的,它很容易导致错误 2 和 3,但我想不出有什么方法会导致错误 1。

标签: sql-server sql-server-2008 tsql sql-server-2008-r2


【解决方案1】:
select Schema_name(schema_id) from sys.tables where name ='Table_report';

结果是哪个模式? 如果你想移动它:

ALTER SCHEMA dbo
TRANSFER SchemaSource.Table_report;

http://msdn.microsoft.com/en-us/library/ms173423%28v=sql.105%29.aspx

【讨论】:

    【解决方案2】:

    我们最近在工作中遇到了这个问题,可能发生的事情是有人在他们的用户名(而不是 DBO - 数据库所有者)下创建了一个名为 Table_report 的表。你应该试试:

    Drop Table Table_report
    

    然后重新运行您的查询。

    编辑:您应该能够运行以下查询来查找数据库中的所有现有表,并找出该表附加的用户名

    select ss.name ,st.* from sys.tables st
    inner join sys.schemas ss
     on ss.schema_id = st.schema_id
    

    【讨论】:

    • 如果表中包含数据,您真的会遇到问题,不是吗?
    • 注意。无法删除表“Table_Report”,因为它不存在或您没有权限。
    • 我用上面的查询在数据库中发现了两个我自己的垃圾表。
    猜你喜欢
    • 2010-12-10
    • 1970-01-01
    • 2020-02-12
    • 1970-01-01
    • 1970-01-01
    • 2016-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多