该操作失败,因为名称为“ XPKUSERS”的索引或统计信息

时间:2019-06-10 04:17:24

标签: sql sql-server tsql

需要帮助您了解错误“由于索引或统计名称为'XPKUSERS',操作失败,并且需要将查询转换为TSQL

CREATE TABLE TDM_USERS_AUTH 
(
  USER_ROLE_ID VARCHAR(3) NOT NULL 
, ROLE VARCHAR(100) NOT NULL 
, USER_ID VARCHAR(15) NOT NULL 
);
CREATE UNIQUE INDEX XPKUSERS ON TDM_USERS_AUTH (USER_ROLE_ID ASC);
ALTER TABLE TDM_USERS_AUTH
ADD CONSTRAINT XPKUSERS PRIMARY KEY 
(
  USER_ROLE_ID 
)
USING INDEX XPKUSERS;
  

消息1913年,第16级,状态1,第1行
  该操作失败,因为表'TDM_USERS_AUTH'上已经存在名称为'XPKUSERS'的索引或统计信息。
  信息1750,级别16,状态0,第1行
  无法创建约束或索引。查看以前的错误。

1 个答案:

答案 0 :(得分:2)

USING INDEX子句是特定于Oracle的语法。在SQL Server中,创建主键时始终会创建一个新索引。您只能选择新索引是群集索引(默认情况下)还是非群集索引。

您可以简单地创建PRIMARY KEY(之前无需创建索引),如下所示:

CREATE TABLE TDM_USERS_AUTH 
(
  USER_ROLE_ID VARCHAR(3) NOT NULL 
, ROLE VARCHAR(100) NOT NULL 
, USER_ID VARCHAR(15) NOT NULL 
);
ALTER TABLE TDM_USERS_AUTH
ADD CONSTRAINT XPKUSERS PRIMARY KEY 
(
  USER_ROLE_ID 
);

您还可以在创建表时指定主键:

CREATE TABLE TDM_USERS_AUTH 
(
  USER_ROLE_ID VARCHAR(3) NOT NULL CONSTRAINT XPKUSERS PRIMARY KEY 
, ROLE VARCHAR(100) NOT NULL 
, USER_ID VARCHAR(15) NOT NULL 
);