我想將SQL Server的一個(gè)更新SQL統(tǒng)一一下共同的變量:
update scm_product_stock set sum_quantity=(select sum(quantity) as t_sum from scm_product_stock_list where operating_center_inner_id=100000 and product_code='CS01') where operating_center_inner_id=100000 and product_code='CS01';
update scm_product_stock set able_quantity=sum_quantity-out_quantity where operating_center_inner_id=100000 and product_code='CS01';
上面product_code='CS01'出現(xiàn)了3次,我想用一個(gè)變量代替,然后在最上面對(duì)這個(gè)變量進(jìn)行賦值,下面的SQL調(diào)用這個(gè)變量,以避免出現(xiàn)多個(gè)位置時(shí),忘了改掉其中一些位置造成SQL更新出錯(cuò),要如何優(yōu)化這個(gè)SQL?
?
您可以使用SQL Server的變量來統(tǒng)一管理這些公共值。以下是優(yōu)化后的SQL:
-- 聲明并設(shè)置變量
DECLARE @product_code VARCHAR(50) = 'CS01';
DECLARE @operating_center_inner_id INT = 100000;
-- 使用變量進(jìn)行更新操作
UPDATE scm_product_stock
SET sum_quantity = (
SELECT SUM(quantity)
FROM scm_product_stock_list
WHERE operating_center_inner_id = @operating_center_inner_id
AND product_code = @product_code
)
WHERE operating_center_inner_id = @operating_center_inner_id
AND product_code = @product_code;
UPDATE scm_product_stock
SET able_quantity = sum_quantity - out_quantity
WHERE operating_center_inner_id = @operating_center_inner_id
AND product_code = @product_code;
進(jìn)一步優(yōu)化建議:
如果您需要批量處理多個(gè)產(chǎn)品代碼,可以使用表變量或臨時(shí)表:
-- 方法1:使用表變量處理多個(gè)產(chǎn)品
DECLARE @products TABLE (
product_code VARCHAR(50),
operating_center_inner_id INT
);
INSERT INTO @products VALUES
('CS01', 100000),
('CS02', 100000),
('CS03', 100000);
UPDATE s
SET s.sum_quantity = (
SELECT SUM(quantity)
FROM scm_product_stock_list l
WHERE l.operating_center_inner_id = p.operating_center_inner_id
AND l.product_code = p.product_code
),
s.able_quantity = s.sum_quantity - s.out_quantity
FROM scm_product_stock s
INNER JOIN @products p ON s.operating_center_inner_id = p.operating_center_inner_id
AND s.product_code = p.product_code;
或者使用單個(gè)UPDATE語(yǔ)句完成所有操作:
DECLARE @product_code VARCHAR(50) = 'CS01';
DECLARE @operating_center_inner_id INT = 100000;
UPDATE scm_product_stock
SET sum_quantity = (
SELECT SUM(quantity)
FROM scm_product_stock_list
WHERE operating_center_inner_id = @operating_center_inner_id
AND product_code = @product_code
),
able_quantity = (
SELECT SUM(quantity)
FROM scm_product_stock_list
WHERE operating_center_inner_id = @operating_center_inner_id
AND product_code = @product_code
) - out_quantity
WHERE operating_center_inner_id = @operating_center_inner_id
AND product_code = @product_code;
主要優(yōu)點(diǎn):
易于維護(hù):只需修改變量值即可影響所有相關(guān)位置
減少錯(cuò)誤:避免遺漏修改某些位置
提高可讀性:SQL邏輯更清晰
便于批量處理:可以輕松擴(kuò)展為處理多個(gè)產(chǎn)品代碼
選擇哪種方式取決于您的具體需求和使用場(chǎng)景。
該文章在 2025/9/28 10:09:36 編輯過