【问题标题】:Invalid object name 'ddl_log' on table drop but object exists?表删除时对象名称“ddl_log”无效但对象存在?
【发布时间】:2015-08-31 12:25:49
【问题描述】:

我以具有数据库角色 db_owner 成员身份的登录名/用户身份登录并尝试删除表,但在 SQLServer 2012 中收到错误 208 Invalid object name 'ddl_log'。

drop table [dbo].[ddl_log]

selectdeletetruncate 工作正常,我可以添加新列但不能删除任何旧列。

该表在 SSMS 中可见,并且在以下所有视图中查找时,我在 dbo (schema_id=1) 架构上找到了该对象。

select * from sys.objects where name = 'ddl_log'
select * from sys.schemas
select * from sys.tables where name = 'ddl_log'
select * from INFORMATION_SCHEMA.TABLES where TABLE_NAME='ddl_log'
select * from sys.sysobjects where name = 'ddl_log'

该表最初用于我们的一个主数据库中的 SQL Profiler,然后该数据库已备份并恢复到当前数据库。我认为这是哪里出了问题,但无法弄清楚是什么/为什么。

有谁知道这张桌子上可能缺少哪些信息/权限会阻止我删除它?

【问题讨论】:

  • 此表在master 数据库中吗?使用全名DROP TABLE [database_name].[dbo].[ddl_log]
  • 右击表,选择“查看依赖项”...
  • 似乎该表依赖于该数据库中不存在的架构上的触发器(schema_id=0)。关于如何删除该触发器的任何想法?
  • 通过删除 /Programmability/Database Triggers/ 下的触发器解决了这个问题,然后我就可以删除我的表了。感谢您为我指明正确的方向:)

标签: sql-server database sql-server-2012


【解决方案1】:

尝试清除以下缓存:

Edit -> IntelliSense -> Refresh Local Cache

或快捷方式:

CTRL + SHIFT + R

【讨论】:

  • 不,这并没有什么不同:(
【解决方案2】:

通过删除触发器(链接到不存在的架构)与表的依赖关系来解决。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-14
    相关资源
    最近更新 更多