Member 13495182 Ответов: 0

Нарушение ограничения уникального ключа не позволяет вставить дубликат ключа в объект '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, и у вас не может быть другой записи.

0 Ответов