Ric*_*ard 1 sql-server sql-server-2008-r2 unique-constraint
我继承了这个数据库,它有一个定义如下的表:
CREATE TABLE home_tickets(
id int IDENTITY(1,1) NOT NULL,
identifier nvarchar(45) NOT NULL,
start_date_time datetime NOT NULL,
revised bit NOT NULL,
agency_code nvarchar(100) NOT NULL,
archived tinyint NOT NULL,
CONSTRAINT PK__home_tic__3213E83F236943A5 PRIMARY KEY CLUSTERED (id ASC) WITH (
PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON PRIMARY,
CONSTRAINT UQ__home_tic__969168722645B050 UNIQUE NONCLUSTERED (identifier ASC) WITH (
PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON PRIMARY
) ON PRIMARY
Run Code Online (Sandbox Code Playgroud)
但是,当我从给出的表中选择时,我identifier
得到了多行返回。
select * from home_tickets where identifier = 'TI54815780';
id identifier start_date_time revised archived
415044 TI54815780 2013-10-24 00:00:00.000 0 0
652845 TI54815780 2014-10-24 00:00:00.000 0 0
171642 TI54815780 2012-10-24 00:00:00.000 0 0
945275 TI54815780 2015-10-24 00:00:00.000 1 0
1220327 TI54815780 2016-10-24 00:00:00.000 1 0
Run Code Online (Sandbox Code Playgroud)
为什么在 上有唯一约束时会发生这种情况identifier
?
似乎底层约束索引已禁用。您可以通过以下方式验证:
SELECT is_disabled
FROM sys.indexes
WHERE
object_id = OBJECT_ID(N'home_tickets')
AND name = N'UQ__home_tic__969168722645B050';
Run Code Online (Sandbox Code Playgroud)
修复错误值后,重建索引以启用约束:
ALTER INDEX UQ__home_tic__969168722645B050 ON home_tickets REBUILD;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
531 次 |
最近记录: |