我有一个SQL表,如下所示:
CREATE TABLE [LocalizedCountries]
(
[Guid] UNIQUEIDENTIFIER NOT NULL,
[CustomerLanguageGuid] UNIQUEIDENTIFIER NOT NULL,
[CountryGuid] UNIQUEIDENTIFIER NOT NULL,
[LocalizedCountryName] AddressCountryType NOT NULL,
CONSTRAINT [PK_LocalizedCountries] PRIMARY KEY ([Guid]),
CONSTRAINT [TUC_LocalizedCountries_1] UNIQUE ( [CountryGuid], [CustomerLanguageGuid])
)
GO
因此,有一个约束[TUC_LocalizedCountries_1]
,即确保每对列[CountryGuid], [CustomerLanguageGuid]
都是唯一的。
我在表中有一行,该行在所有表列中都有值。
但是,当我为该行提供 UPDATE 语句时,它会给我一个与向表插入重复值相关的错误。
UPDATE [dbo].[LocalizedCountries]
SET [Guid] = N'591545A9-F2C7-497E-A299-1C8471223CE9',
[CustomerLanguageGuid] = N'935DE428-12DA-4FD5-9C64-AB87747FA734',
[LocalizedCountryName] = N'Estonia',
[CountryGuid] = N'FE73A07D-8505-89C2-450B-4E3F4241F1BB'
WHERE Guid = N'591545A9-F2C7-497E-A299-1C8471223CE9'
GO
错误:
Msg 2627,级别 14,状态 1,第 4
行 违反唯一键约束"TUC_LocalizedCountries_1"。无法在对象 'dbo 中插入重复键。本地化国家'。重复的键值为 (fe73a07d-8505-89c2-450b-4e3f4241f1bb, 935de428-12da-4fd5-9c64-ab87747fa734)。
但是,如果按如下所示输入 UPDATE 命令,则没有错误。
UPDATE [dbo].[LocalizedCountries]
SET [Guid] = N'591545A9-F2C7-497E-A299-1C8471223CE9',
[LocalizedCountryName] = N'Estonia',
[CountryGuid] = N'FE73A07D-8505-89C2-450B-4E3F4241F1BB'
WHERE Guid = N'591545A9-F2C7-497E-A299-1C8471223CE9'
我很困惑是什么导致了这个错误。我有等效LocalizedCities
具有完全相同的结构和约束的表,并且该表不会显示错误。
看起来我解决了问题。这是与约束的冲突。
即使错误消息谈到插入重复的对象,UPDATE 语句的约束冲突错误也会给出相同的消息。
Msg 2627,级别 14,状态 1,第 4
行 违反唯一键约束"TUC_LocalizedCountries_1"。无法在对象 'dbo 中插入重复键。本地化国家'。重复的键值为 (fe73a07d-8505-89c2-450b-4e3f4241f1bb, 935de428-12da-4fd5-9c64-ab87747fa734)。