Sql server T-SQL:Msg 2627,14级,状态1,更新中
我有一个SQL表,如下所示:Sql server T-SQL:Msg 2627,14级,状态1,更新中,sql-server,tsql,Sql Server,Tsql,我有一个SQL表,如下所示: CREATE TABLE [LocalizedCountries] ( [Guid] UNIQUEIDENTIFIER NOT NULL, [CustomerLanguageGuid] UNIQUEIDENTIFIER NOT NULL, [CountryGuid] UNIQUEIDENTIFIER NOT NULL, [LocalizedCountryName] AddressCountryType NOT NULL, C
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\u LocalizedCountries\u 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
错误:
味精2627,第14级,状态1,第4行违反唯一密钥约束“TUC_LocalizedCountries_1”。无法在对象“dbo.LocalizedCountries”中插入重复键。重复的键值为(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语句的约束冲突错误也会给出相同的消息
味精2627,第14级,状态1,第4行违反唯一密钥约束“TUC_LocalizedCountries_1”。无法在对象“dbo.LocalizedCountries”中插入重复键。重复的键值为(fe73a07d-8505-89c2-450b-4e3f4241f1bb、935de428-12da-4fd5-9c64-ab87747fa734)
那么,被违反的唯一约束的确切定义是什么?检查该约束确保了什么-然后您可能会理解为什么它会在您的第一个
UPDATE
语句中抛出此错误。您必须已经有一个不同的行,其countryguid='FE73A07D-8505-89C2-450B-4E3F4241F1BB'和customlanguageguid='935de428-12da-4fd5-9c64-ab87747fa734'为什么要将Guid列更新为相同的值已经是了?您还需要为聚集索引使用另一列,或者为主键上的大量碎片做好准备。由于我使用ASP.NET,此SQL语句是从SQL探查器收集的-这就是为什么其中有一些额外的列。然而,我想我解决了这个问题。表中已经有一些数据。我的Javascript没有收集正确的guid,因此这个UPDATE语句将要更新表,以便与约束发生冲突。因此,混淆源于错误消息本身,它谈到插入数据,甚至SQL语句也是更新的。谢谢你们的帮助