代码之家  ›  专栏  ›  技术社区  ›  priyanka.sarkar

如何在IN子句中使用IIf函数?

  •  0
  • priyanka.sarkar  · 技术社区  · 5 年前

    我有一个存储过程如下

    ALTER PROCEDURE [dbo].[usp_testProc]
        (@Product NVARCHAR(200) = '', 
         @BOMBucket NVARCHAR(100) = '')
        --exec usp_testProc '','1'
    AS
    BEGIN
        SELECT *
        FROM Mytbl x
        WHERE 1 = 1
          AND (@Product IS NULL OR @Product = '' OR x.PRODUCT = @Product)
          AND (@BOMBucket IS NULL OR @BOMBucket = '' OR CAST(x.BOMBucket AS NVARCHAR(100)) IN (IIF(@BOMBucket != '12+', @BOMBucket, '13,14')))
    END
    

    其他一切,如果工作正常,除了当我传递桶值为12+。理想情况下,它应该显示铲斗13和14的结果。但结果集为空。

    0 回复  |  直到 5 年前
        1
  •  1
  •   sticky bit    5 年前

    你可以用一个布尔表达式来表达这个逻辑。

    ...
    (@BOMBucket <> '12+'
     AND cast(x.BOMBucket AS nvarchar(100)) = @BOMBucket
      OR @BOMBucket = '12+'
         AND cast(x.BOMBucket AS nvarchar(100)) IN ('13', '14'))
    ...
    

    x.BOMBucket = cast(@BOMBucket AS integer)
    

    try_cast() 但据我所知不是2012年。也许您应该重新考虑一下您的方法,并传递一个表变量 BOMBucket 改为整数。