【问题标题】:UNIQUE Constraint error唯一约束错误
【发布时间】:2018-11-24 18:26:11
【问题描述】:

我正在从 MySQL 迁移到 SQL Server 2012,但遇到了麻烦。问题是我有几个带有UNIQUE 命令的表,我尝试将它们转换为等效的 SQL Server 语法,但是当我尝试使用相同的 UNIQUE 字段名称创建第二个表时,会出现此错误。我该如何解决它。

Msg 2714, Level 16, State 5, Line 1
There is already an object named 'Codigo' in the database.
Msg 1750, Level 16, State 0, Line 1
Could not create constraint. See previous errors.
CREATE TABLE cdepartamento (
  Sys_PK int NOT NULL IDENTITY,
  Sys_TimeStamp datetime2(0) NOT NULL,
  Sys_GUID varchar(32) NOT NULL,
  Sys_DTCreated datetime2(0) DEFAULT NULL,
  Sys_User varchar(5) DEFAULT NULL,
  Sys_LastUser varchar(5) DEFAULT NULL,
  Sys_Exported smallint DEFAULT NULL,
  Sys_DTExported datetime2(0) DEFAULT NULL,
  Sys_Info varchar(32) DEFAULT NULL,
  Codigo varchar(15) NOT NULL,
  Descripcion varchar(150) DEFAULT NULL,
  sys_recver int DEFAULT '0',
  sys_deleted binary(1) DEFAULT NULL,
  sys_lock int DEFAULT NULL,
  PRIMARY KEY (Sys_PK),
  **CONSTRAINT Sys_GUID UNIQUE (Sys_GUID),**
  **CONSTRAINT Codigo UNIQUE (Codigo)**
)

【问题讨论】:

  • "数据库中已经有一个名为 'Codigo' 的对象",您可以尝试在您的 ms SQL 中搜索并确保没有“Codigo”对象退出吗?
  • 猜测表上的索引不能与表中的列同名。

标签: mysql sql-server syntax migration unique-constraint


【解决方案1】:

嗯,错误说明了一切......

您需要在这些约束中强制执行唯一性。这就是为什么我讨厌 mysql 并且我鄙视那些使用它并发誓使用它的公司,因为有人选择使用它。

在命名约束时,请使用广泛使用的模式:

  CONSTRAINT UN_cdepartamento_GUID UNIQUE (Sys_GUID),
  CONSTRAINT UN_cdepartamento_Codigo UNIQUE (Codigo)

但最好的方法是,因为您只要求每列的唯一性,所以在定义列时只添加约束。这样,您就可以让您的 RDMBS 为您命名。让我告诉你,SQL Server 和 PostgreSQL 在命名这些方面做得很好......

【讨论】:

    【解决方案2】:

    检查您在 Sql Server 中添加的唯一约束的名称是否唯一。该字段可以是任何内容,但唯一约束的名称在数据库中必须是唯一的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-27
      • 2021-10-25
      • 2018-03-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多