SQL连接到函数,从逗号分隔的参数返回表。如果参数为空 Join到所有

给出以下在TSQL中的存储过程,可以传入一个逗号分隔的ID字符串,交给一个函数,该函数返回一个ID表,以便加入到该表中,如果传入的参数,是否有一个优雅的方法可以这样做。@BomAssemIDs是NULL,这样就不是没有记录被选中,而是ALL被选中。

作为一个连接,它是过滤,但如果是 @BomAssemIDs 是空的,我不想使用它。 我是想避免使用额外的代码或动态SQL,所以现在我的解决方案是一个大的if语句,一个使用表函数join,另一个不使用它。 似乎我应该可以优雅的表达出来,但我无法把握。使用SQLServer 2012

ALTER PROCEDURE dbo.[up_BomAssem_by_BomAssemIDs]
    @JobID  int ,
    @BomAssemIDs varchar(2000) 
AS
BEGIN     
    SELECT ba.* 
    FROM BomAssem ba 
    JOIN dbo.uf_SplitIntIDsToTable(@BomAssemIDs) sl ON ba.BomAssemID = sl.RecID
    where ba.JobID = @JobID    
END

解决方案:

鉴于你只使用 join 筛选,我会把它移到 where 子句(过滤所属的地方),然后添加一个 OR 检验 where @BomAssemIDs is null 如果允许所有记录通过,例如

SELECT ba.* 
FROM BomAssem ba
WHERE ba.JobID = @JobID
AND (
  @BomAssemIDs IS NULL
  OR ba.BomAssemID IN (select RecId from dbo.uf_SplitIntIDsToTable(@BomAssemIDs))
);

如果我不指出,你最好用一个 表有价参数 而不是逗号分隔的字符串。

给TA打赏
共{{data.count}}人
人已打赏
未分类

地图在开始进入页面时不起作用,但如果在vuejs中刷新页面时起作用。

2022-9-8 11:44:40

未分类

MPI_Gather在二维矩阵上只显示从主程序收集的数据[重复] 。

2022-9-8 11:44:42

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索