【问题标题】:Remove concat and IIF function for SQL Server 2008删除 SQL Server 2008 的 concat 和 IIF 函数
【发布时间】:2020-01-16 14:38:14
【问题描述】:

如何转换我的 SQL Server 2012 语句使其与 SQL Server 2008 兼容?

我知道 Microsoft 不再支持 SQL Server 2008,但我们的一位客户仍在使用它。

这是我的 SQL Server 2012 查询:

IIF(@Filter = '', 1, 0) + CHARINDEX(CONCAT(',', Group_ID, ','), CONCAT(',', @Filter + ',')) > 0 

我们的一个客户端在 SQL Server 2008 上,不支持 IIFCONCAT,所以我想更改上面的查询:

我尝试的是:

Where @Filter = case when @Filter= '' then 1 + CharIndex(',' + convert(varchar(100),Group_ID) +',',',' + @Filter+',') 

                                            when @Filter <> '' then 0 + CharIndex(',' + convert(varchar(100),Group_ID) +',',',' + @Filter+',')
                         END

它不会产生任何错误,但我的输出是空白的。

有人可以建议需要做什么

【问题讨论】:

  • SQL Server 2012 也不支持。即使是 2014 年也没有主流支持

标签: sql sql-server tsql sql-server-2008


【解决方案1】:

如果@Filter 不是空字符串或group_id 属于存储在@Filter 中的CSV 列表,则现有条件成功。

我会用ORLIKE 来表达这一点;我发现在不使用charindex() 的情况下以这种方式更容易理解意图(但这也是一个品味问题):

WHERE
    @Filter = ''
    OR ',' + @Filter + ',' LIKE '%,' + convert(varchar(100),Group_ID) +',%',

【讨论】:

    【解决方案2】:

    这将做同样的事情: 2008

    case when case when @Filter= '' then 1 else 0 end +
        CharIndex(','+Group_ID+',',','+@Filter+',') > 0 
    

    如果相当于您的 2012

    IIF(@Filter = '', 1, 0) + 
    CHARINDEX(CONCAT(',', Group_ID, ','), CONCAT(',', @Filter + ',')) > 0 
    

    【讨论】:

    • 如何在此处添加 charindex > 0 逻辑
    • 调整了我的答案红色
    【解决方案3】:

    您应该使用 WHEN CASE 语法而不是 IIF 和“+”聚合而不是 CONCAT

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-26
      • 1970-01-01
      • 2012-01-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多