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

基于GAPTEQ的物流系统多批量插入SQL语句实现方案问询

单条SQL实现根据选择插入对应数量的运输订单

你之前用CASE WHEN控制INSERT的写法无效,因为SQL中CASE是表达式,不能用来分支执行不同的DML语句。下面是几种可行的单条SQL方案,适配GAPTEQ的参数环境:

方法1:利用数字生成表+条件计数插入

通过将@Input_User转换为对应的插入行数,再生成对应行数的数据集,用INSERT SELECT批量插入。

方案A:依赖系统表生成行(简洁高效)

INSERT INTO dbo.table (row1, row2, row3)
SELECT val1, val2, val3
FROM (
    SELECT TOP (
        CASE @Input_User
            WHEN '1 Palette' THEN 1
            WHEN '2 Paletten' THEN 2
            WHEN '3 Paletten' THEN 3
            ELSE 0 -- 无效输入时不插入
        END
    ) 1 AS Dummy
    FROM master..spt_values
    WHERE TYPE = 'P' -- 取内置整数序列
) AS RowGenerator;

方案B:递归CTE生成行(无外部依赖)

如果不想依赖系统表,用递归CTE生成对应行数:

WITH RowGenerator AS (
    SELECT 1 AS Counter
    UNION ALL
    SELECT Counter + 1
    FROM RowGenerator
    WHERE Counter < (
        CASE @Input_User
            WHEN '1 Palette' THEN 1
            WHEN '2 Paletten' THEN 2
            WHEN '3 Paletten' THEN 3
            ELSE 0
        END
    )
)
INSERT INTO dbo.table (row1, row2, row3)
SELECT val1, val2, val3
FROM RowGenerator;

方法2:UNION ALL条件拼接(适合固定少量选项)

针对固定的1/2/3托盘选项,用UNION ALL结合WHERE条件,只执行符合当前选择的分支:

INSERT INTO dbo.table (row1, row2, row3)
-- 插入第1条
SELECT val1, val2, val3 WHERE @Input_User IN ('1 Palette', '2 Paletten', '3 Paletten')
UNION ALL
-- 插入第2条(仅当选择2/3托盘时执行)
SELECT val1, val2, val3 WHERE @Input_User IN ('2 Paletten', '3 Paletten')
UNION ALL
-- 插入第3条(仅当选择3托盘时执行)
SELECT val1, val2, val3 WHERE @Input_User = '3 Paletten';

GAPTEQ适配注意事项

  • 确保val1/val2/val3是固定值或GAPTEQ提供的合法参数(比如会话变量、站点参数)
  • 如果GAPTEQ不支持DECLARE变量,直接把CASE逻辑嵌入到TOP或CTE的条件中即可
  • 建议保留ELSE 0的分支,避免无效输入时产生错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 10:41:17