If you want to change the Product Price which is on Sale you have
to update both _sale_price
and _price
with same value.
//for Regular Price
UPDATE wp_postmeta
SET meta_value = diff_price_value
WHERE post_id = variation_id AND meta_key = '_regular_price';
//for Price
UPDATE wp_postmeta
SET meta_value = price_value
WHERE post_id = variation_id AND meta_key = '_price';
//for Sale Price
UPDATE wp_postmeta
SET meta_value = price_value
WHERE post_id = variation_id AND meta_key = '_sale_price';
ADDED
If you want to merge all the above query into a single query you can use this one:
UPDATE wp_postmeta
SET meta_value = CASE
WHEN meta_key = "_regular_price" THEN diff_price_value
WHEN meta_key = "_price" THEN price_value
WHEN meta_key = "_sale_price" THEN price_value
ELSE meta_key
END
WHERE post_id = variation_id
AND meta_key IN ("_regular_price", "_price", "_sale_price");
Also you have to delete WooCommerce product price caching which is stored in wp_options
table under _transient_timeout_wc_var_prices_{{post_id}}
and _transient_wc_var_prices_{{post_id}}
in option_name
DELETE
FROM `wp_options`
WHERE (`option_name` LIKE '_transient_wc_var_prices_%'
OR `option_name` LIKE '_transient_timeout_wc_var_prices_%')
All the above query is tested and worked for me.
Before running this query do take a database backup
Reference: Copy WooCommerce products Sale prices to regular prices and reset Sale prices
Hope this helps!