当我使用约束时,数据库中已存在具有该名称的对象

时间:2017-06-07 00:08:44

标签: sql-server

当我使用这个脚本时:

IF OBJECT_ID('dbo.TableX', 'U') IS NOT NULL 
    DROP TABLE dbo.TableX

CREATE TABLE TableX
(
    ...
    ...
    ...

    CONSTRAINT TableX PRIMARY KEY (column1, column2, column3)
)

我收到错误

  

数据库中已存在名为“TableX”的对象

但这只是在我使用CONSTRAINT行时。

为什么我只在使用CONSTRAINT时才会收到错误,我该如何解决呢?

2 个答案:

答案 0 :(得分:5)

那是因为您的Constaint名称与表名相同。将其命名为PK_TableX

答案 1 :(得分:1)

表和约束都被视为SQL Server数据库中的对象。 检查sys.objects系统表。

因此,Table和Constraint的名称不能相同。当您运行create语句时,SQL Server将首先创建该表,然后尝试创建因为sys.objects表中已存在名称而失败的约束。

为主键约束尝试其他名称。根据标准,主键以PK_为前缀。因此,您可以在此处将主键命名为PK_TableX