首页 > 解决方案 > 多个 WHEN 与在 CASE 语句中使用 IN 的单个 WHEN

问题描述

我正在编写一个脚本来从一个旧的杂乱无章的数据库导入到一个新的数据库中,因此我必须进行大量的完整性检查。旧的数据库并没有做太多的删除操作,所以我也需要过滤掉很多数据。因此,性能是一个考虑因素。

问:我想知道是否有理由选择让多个条件语句返回相同的结果,或者是否有一个IN来捕获所有匹配的条件。从运行下面的 SQL 开始,320,000 行的差异是 0.03 秒。

我相信 SQL Server 会INNER JOIN在使用 IN 时创建一个临时表并在其上创建一个临时表,但我不确定该开销将如何针对简单的相等匹配执行。

SELECT CASE
    WHEN textTable.[Char] = 'A' THEN 'String'
    WHEN textTable.[Char] = 'C' THEN 'String'
    WHEN textTable.[Char] = 'E' THEN 'String'
    WHEN textTable.[Char] = '2' THEN 'Int'
    WHEN textTable.[Char] = '4' THEN 'Int'
    WHEN textTable.[Char] = '6' THEN 'Int'
END AS 'Variable'
FROM [Datatable] AS textTable

SELECT CASE
    WHEN textTable.[Char] IN ('A', 'B', 'C') THEN 'String'
    WHEN textTable.[Char] IN ('2', '4', '6') THEN 'Int'
END AS 'Variable'
FROM [Datatable] AS textTable

标签: sql-servercase

解决方案


推荐阅读