【发布时间】:2014-07-21 20:33:37
【问题描述】:
我有一个带有ID 和DateTime 列的表格
此表在ID 和DateTime 上具有唯一键
DateTime 可以为空
ID 不是 PK
我输入一行
ID DATETIME
1 NULL
然后我为日期时间设置一个值
ID DATEIME
1 2014-07-21 13:34:098
然后我想添加一个新行来制作这样的东西
ID DATETIME
1 2014-07-21 13:34:098
1 NULL
例如,日期时间为 NULL 的行 ID 1 是当前活动行之类的。
现在,例如,我要使当前活动行无效,并为 ID 为 1 的活动行插入不同的时间戳
ID DATETIME
1 2014-07-21 18:20:51.510
1 2014-07-21 18:28:55.710
我收到了英国违规行为。似乎没有意义。
时间戳不重复。
违反 UNIQUE KEY 约束 UK_MyTable。无法在对象 Schema.MyTable 中插入重复键。重复键值为 (222333, Jul 21 2014 8:26PM)
违反 UNIQUE KEY 约束 UK_MyTable。无法在对象 Schema.MyTable 中插入重复键。重复键值为 (1, Jul 21 2014 8:28PM)
谁能解释为什么会发生这种情况?
这是他的唯一约束
ALTER TABLE [Scheme].[MyTable] ADD CONSTRAINT [UK_MyTable] UNIQUE NONCLUSTERED
(
[ID] ASC,
[DateTime] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
然后在我插入新行之前更新 DateTime 字段
update Scheme.MyTable set DateTime = getutcdate() where ID= 1
【问题讨论】:
-
可以粘贴你正在运行的sql插入数据吗?
-
ID 可能不是 PK,但这里显然还有另一个 UNIQUE 约束处于活动状态。检查此表的创建语句。这是什么关系型数据库?看起来很可能是 MySQL 或 PostgreSQL
-
能否请您过去定义唯一约束的方式?
-
听起来你是在插入而不是更新???
-
您能分享一下您正在使用的 SQL 吗?也许创建一个 SQL Fiddle 来演示该问题。
标签: sql sql-server sql-server-2008 unique-constraint