【问题标题】:Create table fails because PK constraint is already present创建表失败,因为 PK 约束已经存在
【发布时间】:2013-06-29 04:32:47
【问题描述】:

这个创建失败,因为已经有一个[PK_docEnum1ssThes]

如何删除[PK_docEnum1ssThes]

[PK_docEnum1ssThes]sys.objects
[docEnum1ssThes]sys.objects
[docEnum1ssThes] 不在 SSMS 中
drop table [docEnum1ssThes] 失败
ALTER TABLE [dbo].[docEnum1ssThes] DROP CONSTRAINT [PK_docEnum1ssThes] 失败

CREATE TABLE [dbo].[docEnum1ssThes]
(
    [searchID] [smallint] NOT NULL,
    [thesID] [smallint] NOT NULL,
    CONSTRAINT [PK_docEnum1ssThes] PRIMARY KEY CLUSTERED 
    (
      [searchID] ASC,
      [thesID] ASC
    )
);

附:还有一个孤立的 FK,但我能够在 FK 表中删除它。

有趣的是,这是唯一一个带有dbo 的用户表。
我可以更改 PK 的名称并创建表。
但是表名是docEnum1ssThes 而不是dbo.docEnum1ssThes

我尝试删除表格时遇到的错误是:

消息 3701,第 11 级,状态 5,第 1 行 无法删除表 'dbo.docEnum1ssThes',因为它不存在或您没有权限。

所以这可能是一个权限的事情,但我在角色 serveradmin

在查看对象资源管理器详细信息的 SSMS 中,该表已列出
从那里我可以删除表
好诡异

【问题讨论】:

  • 您确定它没有与其他表关联吗? SELECT OBJECT_NAME(parent_object_id) FROM sys.objects WHERE name = N'PK_docEnum1ssThes';
  • @AaronBertrand 它与 [docEnum1ssThes] 相关联。但该表不在 SSMS 中,也不在 SysObjects 中。如果我尝试删除它,我会得到并且错误表不存在。
  • 也检查OBJECT_SCHEMA_NAME(parent_object_id)。 SQL Server 不会就对象的存在对您撒谎。显然它就在那里,但你一定没有找对地方。
  • 我错了——它是 SysObjects 但不在 SSMS 中
  • OBJECT_SCHEMA_NAME(parent_object_id) = DBO

标签: sql-server-2008 tsql constraints create-table


【解决方案1】:

在查看对象资源管理器详细信息的 SSMS 中,该表已列出
从那里我可以删除表
好诡异

【讨论】:

    猜你喜欢
    • 2016-10-29
    • 1970-01-01
    • 2015-11-25
    • 1970-01-01
    • 2014-04-08
    • 1970-01-01
    • 2023-04-09
    • 2018-12-23
    • 1970-01-01
    相关资源
    最近更新 更多