【问题标题】:SQL Server Create Table gives error that object '' already exists when it doesn'tSQL Server Create Table 给出对象''已经存在但不存在的错误
【发布时间】:2016-11-28 03:41:46
【问题描述】:

对不起,如果这看起来像重复,但我找不到我的情况的答案。我正在尝试在数据库NBFP 中创建表cardissuedates

这是我的创建声明:

USE NBFoodPantry

CREATE TABLE cardissuedates 
(
    clientid char(36) NOT NULL,
    issuedate date NOT NULL

    CONSTRAINT cardissuedates 
       PRIMARY KEY CLUSTERED (clientid ASC)
           WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, 
                 IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, 
                 ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
) ON [PRIMARY]

我收到此错误:

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

消息 1750,第 16 级,状态 0,第 33 行
无法创建约束或索引。查看以前的错误。

NBFB 数据库中不存在该表,当我检查 master 和 NBFB 时找不到它。

我试过了

select * 
from sys.all_objects
where name like '%ca%'
order by 1

select * 
from sys.tables
where name like 'c%'
order by 1

select * 
from sys.all_columns
where name like 'c%'
order by 1

我什至创建了一个新数据库并执行了这个创建语句,在 USE 语句中使用了新的数据库名称。同样的错误。

我已停止退出 SSMS 的所有服务。似乎没有任何效果。 我不知道该去哪里找了。

任何帮助将不胜感激。

谢谢

【问题讨论】:

  • 您是否尝试过运行 DROP TABLE cardissuedates 来确认该表不存在?
  • 错误在于创建约束,而不是表,请看下面我的回答

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


【解决方案1】:

您要为主键提供与表相同的名称,这是不允许的,因为两者都是架构范围的对象,并且多个对象不能具有相同的 schema_name.object_name。你可以这样做:

CREATE TABLE cardissuedates ( 
    clientid char(36) NOT NULL, 
    issuedate date NOT NULL CONSTRAINT 
    pk_cardissuedates PRIMARY KEY CLUSTERED ( clientid ASC )
    WITH (
        PAD_INDEX = OFF, 
        STATISTICS_NORECOMPUTE = OFF, 
        IGNORE_DUP_KEY = OFF, 
        ALLOW_ROW_LOCKS = ON, 
        ALLOW_PAGE_LOCKS = ON, 
        FILLFACTOR = 90
    ) ON [PRIMARY] 
) ON [PRIMARY]

我刚刚在约束中添加了前缀 PK_

【讨论】:

  • #Massimiliano Carosi -- 谢谢。那行得通。我知道我一定错过了一些简单的东西。再次感谢您!
猜你喜欢
  • 1970-01-01
  • 2021-10-04
  • 1970-01-01
  • 1970-01-01
  • 2018-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多