You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server:双表插入数据并按条件生成PriceCode

嘿,我来帮你搞定这个插入逻辑的需求!结合你提到的ProductMst和PriceMst两张表,咱们可以用存储过程来实现这个带条件的插入规则,调用起来也方便。先理清楚表的核心结构(你可以根据实际表字段调整),然后一步步来实现:

解决方案实现

1. 假设表结构

先明确两张表的核心字段(如果你的实际表字段有差异,对应修改就行):

-- 产品主表 ProductMst
CREATE TABLE ProductMst (
    ProductCode VARCHAR(20) PRIMARY KEY, -- 主产品编码,比如FP-001
    ProductName VARCHAR(100) NOT NULL,
    BasePrice DECIMAL(10,2) NOT NULL, -- 基准单价(按1kg计算)
    CreateDate DATETIME DEFAULT GETDATE()
);

-- 价格主表 PriceMst
CREATE TABLE PriceMst (
    PriceCode VARCHAR(25) PRIMARY KEY, -- 价格编码,比如FP-001-01
    ProductCode VARCHAR(20) FOREIGN KEY REFERENCES ProductMst(ProductCode),
    Weight VARCHAR(10) NOT NULL, -- 重量规格:1kg、750g、500g、250g
    UnitPrice DECIMAL(10,2) NOT NULL, -- 对应规格的单价
    CreateDate DATETIME DEFAULT GETDATE()
);

2. 编写存储过程实现插入逻辑

咱们写一个存储过程,接收产品的基本信息,先插入ProductMst的单条记录,再根据基准单价判断要插入PriceMst的记录数:

CREATE PROCEDURE InsertProductAndPrice
    @ProductCode VARCHAR(20),
    @ProductName VARCHAR(100),
    @BasePrice DECIMAL(10,2)
AS
BEGIN
    SET NOCOUNT ON;

    -- 第一步:插入ProductMst单条记录
    INSERT INTO ProductMst (ProductCode, ProductName, BasePrice)
    VALUES (@ProductCode, @ProductName, @BasePrice);

    -- 第二步:根据基准单价判断插入PriceMst的记录
    IF @BasePrice > 300
    BEGIN
        -- 生成四个规格的价格记录,按重量比例计算单价
        INSERT INTO PriceMst (PriceCode, ProductCode, Weight, UnitPrice)
        VALUES
            (CONCAT(@ProductCode, '-01'), @ProductCode, '1kg', @BasePrice),
            (CONCAT(@ProductCode, '-02'), @ProductCode, '750g', @BasePrice * 0.75),
            (CONCAT(@ProductCode, '-03'), @ProductCode, '500g', @BasePrice * 0.5),
            (CONCAT(@ProductCode, '-04'), @ProductCode, '250g', @BasePrice * 0.25);
    END
    ELSE
    BEGIN
        -- 单价低于300时,仅插入一条默认规格的记录(这里默认1kg,你可以按需调整)
        INSERT INTO PriceMst (PriceCode, ProductCode, Weight, UnitPrice)
        VALUES (CONCAT(@ProductCode, '-01'), @ProductCode, '1kg', @BasePrice);
    END
END

3. 调用存储过程示例

比如插入一个单价超过300的产品:

EXEC InsertProductAndPrice 'FP-001', '高端烘焙咖啡豆', 450.00;

执行后,ProductMst会新增一条FP-001的记录,PriceMst则会生成FP-001-01到FP-001-04四条对应不同重量规格的价格记录。

再插入一个单价低于300的产品:

EXEC InsertProductAndPrice 'FP-002', '原味花草茶包', 280.00;

这时候PriceMst只会生成FP-002-01这一条记录。

几个注意点

  • 如果你的单价计算不是按重量比例(比如750g有特殊定价),直接修改存储过程里的UnitPrice计算部分就行。
  • 如果PriceCode的后缀规则需要调整(比如不用-01而是其他格式),改一下CONCAT里的后缀即可。
  • 实际使用时,建议在存储过程里加个判断,检查ProductCode是否已经存在,避免主键冲突。

内容的提问来源于stack exchange,提问作者Tushar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:32:07