powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Violation of UNIQUE KEY
6 сообщений из 6, страница 1 из 1
Violation of UNIQUE KEY
    #40041400
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]
...
Рейтинг: 0 / 0
Violation of UNIQUE KEY
    #40041402
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
возникла идея
когда данные в 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
Violation of UNIQUE KEY
    #40041415
PizzaPizza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
казалось бы причем тут оракл.

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

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


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