Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Violation of UNIQUE KEY / 6 сообщений из 6, страница 1 из 1
04.02.2021, 00:39
    #40041400
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Violation of UNIQUE KEY
два года работало, и слетело

не пойму, как может появляться Violation of UNIQUE KEY в таком мердже
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
        ;
        merge into dbo.REF_**** gu
          using (
                select *
                  from ##tmp_Users tmp
                 where tmp.user_id  is not null
                   and tmp.group_id is not null
                )
                tmp
                on gu.user_id = tmp.user_id
               and gu.group_id = tmp.group_id
        when not matched then
        insert(    group_id,     user_id)
        values(tmp.group_id, tmp.user_id)
        ;



сообщение: 2627, уровень: 14, состояние: 1, процедура: dbo., строка: 193 [строка начала па-кета: 0]
Violation of UNIQUE KEY constraint 'UK_REF_****'. Cannot insert duplicate key in object 'dbo.REF_****'.
 The duplicate key value is (21033, 19714).
The statement has been terminated.




ALTER TABLE [dbo].[REF_**** ADD  CONSTRAINT [UK_REF_****] UNIQUE NONCLUSTERED 
(
	[Group_id] ASC,
	[User_id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
...
Рейтинг: 0 / 0
04.02.2021, 00:45
    #40041402
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Violation of UNIQUE KEY
возникла идея
когда данные в using-таблице дублируются
а в изменяемой таблице их нет

тогда валится такая ошибка - проверил, действительно

(в Оракле на этот счет ошибка явно говорит о наличии дублирующих данных в using)

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
        merge into dbo.REF_**** gu
          using (
                select 35 group_id, 1101 user_id union all
                select 35 group_id, 1101 user_id
                )
                tmp
                on gu.user_id = tmp.user_id
               and gu.group_id = tmp.group_id
        when not matched then
        insert(    group_id,     user_id)
        values(tmp.group_id, tmp.user_id)
        ;
...
Рейтинг: 0 / 0
04.02.2021, 03:05
    #40041415
PizzaPizza
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Violation of UNIQUE KEY
казалось бы причем тут оракл.

Violation of UNIQUE KEY constraint это нарушение уникальности т.е. наличие дублей. Это вам сервер и говорит как и оракл. Да и нет проблемы посмотреть к какой таблице constraint относится по его имени.
...
Рейтинг: 0 / 0
04.02.2021, 08:00
    #40041423
msLex
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Violation of UNIQUE KEY
andreymx
два года работало, и слетело

не пойму, как может появляться Violation of UNIQUE KEY в таком мердже
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
        ;
        merge into dbo.REF_**** gu
          using (
                select *
                  from ##tmp_Users tmp
                 where tmp.user_id  is not null
                   and tmp.group_id is not null
                )
                tmp
                on gu.user_id = tmp.user_id
               and gu.group_id = tmp.group_id
        when not matched then
        insert(    group_id,     user_id)
        values(tmp.group_id, tmp.user_id)
        ;



сообщение: 2627, уровень: 14, состояние: 1, процедура: dbo., строка: 193 [строка начала па-кета: 0]
Violation of UNIQUE KEY constraint 'UK_REF_****'. Cannot insert duplicate key in object 'dbo.REF_****'.
 The duplicate key value is (21033, 19714).
The statement has been terminated.




ALTER TABLE [dbo].[REF_**** ADD  CONSTRAINT [UK_REF_****] UNIQUE NONCLUSTERED 
(
	[Group_id] ASC,
	[User_id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]



Вариани 1, дубли в исходной таблице.
Вариант 2, параллельная вставка в RC уровне.
...
Рейтинг: 0 / 0
04.02.2021, 10:45
    #40041464
invm
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Violation of UNIQUE KEY
andreymx,

Merge сам по себе не гарантирует отсутствие дубликатов при вставке.
Гарантировать можно так
Код: sql
1.
merge into dbo.REF_**** gu with (serializable) 
...
Рейтинг: 0 / 0
04.02.2021, 10:58
    #40041470
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Violation of UNIQUE KEY
коллеги, всем спасибо
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Violation of UNIQUE KEY / 6 сообщений из 6, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]