У меня есть таблица SQL следующим образом:T-SQL: Msg 2627, Level 14, State 1, в UPDATE
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, Level 14, State 1, Line 4
Violation of UNIQUE KEY constraint 'TUC_LocalizedCountries_1'. Cannot insert duplicate key in object 'dbo.LocalizedCountries'. The duplicate key value is (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' –
. У вас уже должна быть другая строка с countryguid = 'FE73A07D-8505-89C2-450B-4E3F4241F1BB' и customlanguageguid = ' 935de428-12da-4fd5-9c64-ab87747fa734 ' – andyb
Почему вы обновляете столбец Guid до того же значения, которое оно уже есть? Вам также необходимо использовать другой столбец для вашего кластерного индекса или подготовиться к фрагментации MASSIVE на вашем первичном ключе. –