DB2, juntar à actualização se o valor for diferente
tenho este tipo de pedido de DB2 que funciona
MERGE INTO table_to_upsert AS tab
USING (VALUES
(1, 2, 3),
(4, 5, 6),
(7, 8, 9)
-- more rows
) AS merge (C1, C2, C3)
ON tab.key_to_match = merge.key_to_match -- usually the primary key example : tab.C2 = merge.C2
WHEN MATCHED THEN
UPDATE SET tab.C1 = merge.C1,
tab.C2 = merge.C2,
tab.C3 = merge.C3
WHEN NOT MATCHED THEN
INSERT (C1, C2, C3)
VALUES (merge.C1, merge.C2, merge.C3)
mas agora, o que eu quero é, se a chave primária já existir, então actualiza, mas só actualiza C1 se o novo valor de C1 for diferente do antigo.
Em teoria, algo assim.MERGE INTO table_to_upsert AS tab
USING (VALUES
(1, 2, 3),
(4, 5, 6),
(7, 8, 9)
-- more rows
) AS merge (C1, C2, C3)
ON tab.key_to_match = merge.key_to_match
WHEN MATCHED THEN
UPDATE SET tab.C1 = merge.C1,
tab.C2 = merge.C2,
tab.C3 = merge.C3
WHERE tab.C1 != merge.C1
WHEN NOT MATCHED THEN
INSERT (C1, C2, C3)
VALUES (merge.C1, merge.C2, merge.C3)
Eu adiciono o WHERE tab.C1 != merge.C1
mas não está a funcionar, resulta em
erro: símbolo ilegal onde; símbolos válidos
0
1 answers
Se bem me lembro, podes adicionar uma condição de pesquisa à linha correspondente, ou seja
MERGE INTO table_to_upsert AS tab
USING (VALUES
(1, 2, 3),
(4, 5, 6),
(7, 8, 9)
-- more rows
) AS merge (C1, C2, C3)
ON tab.key_to_match = merge.key_to_match
WHEN MATCHED AND tab.C1 != merge.C1 THEN
UPDATE SET tab.C1 = merge.C1,
tab.C2 = merge.C2,
tab.C3 = merge.C3
WHEN NOT MATCHED THEN
INSERT (C1, C2, C3)
VALUES (merge.C1, merge.C2, merge.C3)
2
Author: RelativePHPNewbie, 2016-08-11 08:45:45