У меня есть таблица размеров, подобная этой:
my_Table
pk1 Primary key
pk2 Primary key
pk3 Primary key
col1
col2
col3
...
и с помощью процедуры для заполнения этой таблицы MERGE INTO оператор:
MERGE INTO my_Table dest
USING
( SELECT <columns>
FROM <tables>
WHERE <conditions> ) src
ON
(dest.pk1 = src.pk1 AND dest.pk2 = src.pk2 AND pk3 = src.pk3)
WHEN MATCHED THEN UPDATE SET dest.col1 = src.col1 ,
dest.col2 = src.col2 ,
dest.col3 = src.col3
WHEN NOT MATCHED THEN INSERT (pk1, pk2, pk3, col1, col2, col3)
VALUES (src.pk1, src.pk2, src.pk3, src.col1, src.col2, src.col3);
моя проблема в том, что запрос ' src ' возвращает несколько строк с одинаковыми первичными ключами, но они не являются дублированными строками, например
| pk1 | pk2 | pk3 | col1 | col2 | col3 |
--------------------------------------------------
| 100 | abc | x99 | 6000,00 | 01/01/2010 | 50,00 |
| 100 | abc | x99 | 0,00 | 01/01/2010 | 30,00 |
| 110 | rty | b50 | 345,00 | 08/10/2009 | 10,00 |
| 120 | xyz | y91 | 1200,00 | 13/02/2009 | 12,50 |
| 120 | xyz | y91 | 1200,00 | 13/02/2009 | 0,00 |
| 120 | xyz | y91 | 1200,00 | 13/02/2009 | 0,00 |
| 120 | xyz | y91 | 1200,00 | 13/02/2009 | 0,00 |
Итак, когда я вызываю мою процедуру, она возвращает уникальную ошибку нарушения ограничения .
что может быть решением этой проблемы?я не пишу запрос src
между прочим ...
если мне нужно изменить src
, я должен иметь для pk (100, abc, x99) :
| pk1 | pk2 | pk3 | col1 | col2 | col3 |
--------------------------------------------------
| 100 | abc | x99 | 6000,00 | 01/01/2010 | 80,00 |
и для ПК (120, XYZ, Y91) я бы:
| pk1 | pk2 | pk3 | col1 | col2 | col3 |
--------------------------------------------------
| 120 | xyz | y91 | 1200,00 | 13/02/2009 | 12,50 |
Заранее спасибо за любые предложения.