如何用高效的代码替换T-SQL CASE语句

时间:2016-09-14 17:10:30

标签: sql sql-server tsql

如何用高效代码替换以下case语句

SELECT 
CASE WHEN LEN(Code.Description)>=30
    THEN left(Code.Description, 30) + '...' 
    ELSE NominalCode.Description END AS ShortDescription
FROM Code

因为它返回的数据集将是30-50,000条记录,根据主要开发人员的说法,这段代码很荒谬。我需要帮助

2 个答案:

答案 0 :(得分:1)

据推测,你打算:

SELECT (CASE WHEN LEN(c.Description) > 30
             THEN left(c.Description, 30) + '...' 
             ELSE c.Description
        END) AS ShortDescription
FROM Code c;

也就是说,Description列引用都来自同一个表。你的代码很好。

但是,我会调整语义,以便生成的字符串始终具有相同的长度:

SELECT (CASE WHEN LEN(c.Description) > 30
             THEN LEFT(c.Description, 27) + '...' 
             ELSE c.Description
        END) AS ShortDescription
FROM Code c;

答案 1 :(得分:1)

除了在产品表中添加ShortDesc字段外,或许我会尝试以下

Concat(left(Code.Description,30),IIF(Len(Code.Description)>30,'...',''))

甚至

left(Code.Description,30)+IIF(Len(Code.Description)>30,'...','')
  

修改

然而,正如您可以看到相同的执行计划,我的方法的性能提高了18%。该测试在隔离的机器上完成,样本量为30,000条记录。

<code>enter image description here</code>

enter image description here

enter image description here