Нарушение ограничения уникального ключа не позволяет вставить дубликат ключа в объект 'dbo.dim_employee'
update b set serviceno = a.serviceno, idno = a.idno from Fleet_StagingLive.dbo.stg_Employee a inner join Fleet_DataMartLive.dbo.Dim_Employee b on a.nodeid = b.nodeid where b.nodeid <> -1 --fms and b.nodeid <> -2 --ctrack and a.IDNo = '580829881659'Структура таблицы
CREATE TABLE [dbo].[Dim_Employee]( [Key_Employee] [int] IDENTITY(1,1) NOT NULL, [Key_Department] [int] NOT NULL, [ServiceNo] [varchar](50) NOT NULL, [IDNo] [varchar](50) NOT NULL, [First_Name] [varchar](50) NOT NULL, [Last_Name] [varchar](50) NOT NULL, [Email] [varchar](100) NOT NULL, [Telephone] [varchar](50) NULL, [Mobile] [varchar](50) NULL, [PhysicalAddress] [varchar](500) NULL, [PostalAddress] [varchar](500) NULL, [HasLoco] [int] NOT NULL, [IsDriver] [int] NOT NULL, [Key_BusinessUnit_WorkCentre] [int] NULL, [Job_Code] [varchar](50) NULL, [AllLoco] [int] NULL, [NodeId] [int] NULL, [AdhocLocoCode] [varchar](10) NULL, CONSTRAINT [PK_Dim_Employee] PRIMARY KEY CLUSTERED ( [Key_Employee] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY], CONSTRAINT [IX_Dim_Employee] UNIQUE NONCLUSTERED ( [ServiceNo] ASC, [IDNo] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GO
Что я уже пробовал:
Я исключил дубликаты только для того, чтобы задание или агент sql server могли быть запущены и завершены ...
Ниже приведена ошибка, которую я получаю :
Violation of UNIQUE KEY constraint 'IX_Dim_Employee'. Cannot insert duplicate key in object 'dbo.Dim_Employee'.The duplicate key value is (400613-CDMG0176, 580829881659)
CHill60
Сообщение об ошибке довольно ясно ... вы пытаетесь обновить таблицу, установив serviceno = 400613-CDMG0176 и idno = 5806195814589, и эта комбинация значений уже находится в таблице Dim_Employee.
Member 13495182
Привет CHill60, я знаю, что вы говорите, так как это обновление, если запись уже существует, она должна вернуть 0 затронутых строк ... эта ошибка имеет какое-то отношение к индексам, поэтому я не знаю, что здесь исправить
ZurdoDev
Вы создаете дубликат записи. Тебе нужно это исправить.
Bryian Tan
вы проверили, существует ли в таблице (400613-CDMG0176, 580829881659)?
CHill60
"поскольку это обновление, если запись уже существует, она должна вернуть 0 затронутых строк" ... нет. Обновление может работать только в том случае, если запись уже существует. Если запись не существует, она вернет 0 затронутых строк. Не имеет значения, меняете ли вы существующую запись или вставляете новую - у вас уже есть запись, где serviceno = 400613-CDMG0176 и idno = 5806195814589, и у вас не может быть другой записи.