Sql 为什么违反了日期时间列的唯一约束?
我有一个带有Sql 为什么违反了日期时间列的唯一约束?,sql,sql-server,sql-server-2008,unique-constraint,Sql,Sql Server,Sql Server 2008,Unique Constraint,我有一个带有ID和DateTime列的表 此表在ID和DateTime DateTime可为空 ID不是主键 我输入一行 ID DATETIME 1 NULL 后来我为日期时间设置了一个值 ID DATEIME 1 2014-07-21 13:34:098 然后我想添加一个新行,这样做 ID DATETIME 1 2014-07-21 13:34:098 1 NULL 例如,带有空datetime的行ID 1是当前活动行或其他行 现在,例如,我将使当前活动行无效,
ID
和DateTime
列的表
此表在ID
和DateTime
DateTime
可为空
ID
不是主键
我输入一行
ID DATETIME
1 NULL
后来我为日期时间设置了一个值
ID DATEIME
1 2014-07-21 13:34:098
然后我想添加一个新行,这样做
ID DATETIME
1 2014-07-21 13:34:098
1 NULL
例如,带有空datetime的行ID 1是当前活动行或其他行
现在,例如,我将使当前活动行无效,并为ID为1的活动行插入不同的时间戳
ID DATETIME
1 2014-07-21 18:20:51.510
1 2014-07-21 18:28:55.710
我在英国违规了。似乎没有道理
时间戳不重复
违反唯一键约束UK_MyTable。无法在object Schema.MyTable中插入重复键。重复的键值为(222333,2014年7月21日8:26PM)
违反唯一键约束UK_MyTable。无法在object Schema.MyTable中插入重复键。重复的键值为(2014年7月21日下午8:28)
有人能解释为什么会发生这种情况吗
这是他唯一的限制
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
当您运行此查询时
update Scheme.MyTable set DateTime = getutcdate() where ID= 1
它将用相同的键排成两行
两个ID
1将具有相同的DateTime
因此,是的,当您运行此查询时,这将违反唯一约束
update Scheme.MyTable set DateTime = getutcdate() where ID= 1
它将用相同的键排成两行
两个ID
1将具有相同的DateTime
因此,是的,这将违反唯一约束如果这是您正在运行的查询,那么您当然会得到一个错误:
update Scheme.MyTable set DateTime = getutcdate() where ID= 1
没有任何东西可以告诉服务器您只想用NULL
DateTime
影响行,因此它会影响两行,并尝试给它们相同的值
也许:
update Scheme.MyTable set DateTime = getutcdate()
where ID= 1 and DateTime is NULL
如果这是您正在运行的查询,那么您当然会得到一个错误:
update Scheme.MyTable set DateTime = getutcdate() where ID= 1
没有任何东西可以告诉服务器您只想用NULL
DateTime
影响行,因此它会影响两行,并尝试给它们相同的值
也许:
update Scheme.MyTable set DateTime = getutcdate()
where ID= 1 and DateTime is NULL
可以粘贴正在运行的sql以插入数据吗?ID可能不是PK,但这里显然存在另一个唯一的约束。检查此表的创建语句。这是什么RDBMS?看起来很可能是MySQL或PostgreSql。你能不能也说说你是如何定义唯一约束的?听起来你是在插入而不是更新???你能分享你正在使用的SQL吗?也许可以创建一个示例来说明问题。是否可以粘贴正在运行的sql以插入数据?ID可能不是PK,但这里显然存在另一个唯一的约束。检查此表的创建语句。这是什么RDBMS?看起来很可能是MySQL或PostgreSql。你能不能也说说你是如何定义唯一约束的?听起来你是在插入而不是更新???你能分享你正在使用的SQL吗?也许可以创建一个演示该问题的示例。啊,请叹气。我没看见:(唉,唉,我没看见:(