唯一约束错误

insrf1ej  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(714)

我正在从mysql迁移到SQLServer2012,但是遇到了麻烦。问题是我有好几张table UNIQUE 命令,我尝试将它们转换为等效的sql server语法,但当我尝试使用相同的唯一字段名创建第二个表时,出现了此错误。我怎样才能修好它。

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)**

)
rsaldnfx

rsaldnfx1#

嗯,错误说明了一切。。。
您需要强制这些约束之间的唯一性。这就是为什么我讨厌mysql,我鄙视那些与mysql合作并发誓要使用它的公司,因为有一个人选择了使用它。
命名约束时,请使用广泛使用的模式:

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

但是最好的方法是,因为您只要求每个列的unicity,所以在定义列时只添加约束。这样,你就可以让你的RDMB为你命名了。让我告诉你,sql server和postgresql在命名这些方面做得很好。。。

wgmfuz8q

wgmfuz8q2#

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

相关问题