T-SQL:消息 2627,级别 14,状态 1,在更新中



我有一个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)。

最新更新