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

SQL存储过程如何实现变量传入多个编码值完成多表联合查询

现有代码问题&优化点
  • 多值匹配不生效:当前写法WHERE ITEMS in (@ProductNumber)仅支持传入单个编码值,若直接传入逗号拼接的多编码字符串,SQL会将整个字符串识别为单个完整值做匹配,无法返回多编码对应的结果。
  • 性能损耗:当前用UNION合并多表结果,会自动对所有返回数据做排序去重。如果业务上不需要去除完全重复的行,替换为UNION ALL可省去去重开销,查询速度提升明显。
  • 字段校验:你描述主编码存储在CATMASTRCAT列,但现有脚本用ITEMS列做过滤条件,封装前请确认字段名是否正确,避免查错字段返回错误结果。
多值传参存储过程实现方案

采用SQL Server原生内置的STRING_SPLIT函数(兼容SQL Server 2016及以上所有版本,无需额外自定义函数,学习成本最低)实现逗号分隔多值传入,存储过程代码如下:

CREATE PROCEDURE GetProductOrganization
    @ProductNumber VARCHAR(MAX) -- 传入格式:英文逗号分隔的多个编码,例:'031325-002-70,031325-001-60'
AS
BEGIN
    SET NOCOUNT ON; -- 关闭行计数返回,减少不必要的网络传输开销

    SELECT ITEMS, ORGANIZATION
    FROM [EU].[dbo].[SOMETHING14]
    WHERE ITEMS IN (SELECT value FROM STRING_SPLIT(@ProductNumber, ','))

    UNION ALL -- 若业务要求必须去重,可替换为UNION

    SELECT ITEMS, ORGANIZATION
    FROM [EU].[dbo].[SOMETHING12]
    WHERE ITEMS IN (SELECT value FROM STRING_SPLIT(@ProductNumber, ','))

    UNION ALL

    SELECT ITEMS, ORGANIZATION
    FROM [EU].[dbo].[SOMETHING11]
    WHERE ITEMS IN (SELECT value FROM STRING_SPLIT(@ProductNumber, ','))
END
GO

调用方式

-- 单编码查询,和原有脚本逻辑完全一致
EXEC GetProductOrganization @ProductNumber = '031325-002-70'

-- 多编码查询,编码间用英文逗号分隔即可
EXEC GetProductOrganization @ProductNumber = '031325-002-70,031325-001-60,052201-009-32'

若你使用的SQL Server版本低于2016(无内置STRING_SPLIT函数),可自行创建一个表值拆分函数实现字符串按逗号切分,后续查询逻辑和上述写法完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 04:03:41