0

我有一个包含带有 if-else 语句的游标的脚本,但是浏览表格需要太多时间。(一个有 79000 行的表需要 1 小时)。所以我需要将它转换为基于集合的方法。

if 语句是

IF  ( 
        SELECT  count (b.key) 
          FROM general..ean a,
               general..mainframe b,
               general..hope c 
        WHERE a.ean = @ean
        AND a.c_suppression = '0' 
        AND a.key = b.key           
        AND b.key = c.key
        AND c.canal = @canal
    ) = 0

其中@ean 和@canal 是使用游标在每一行中检索的值。浏览的表是 tmp_day_house_info_corporate。所以我需要从 tmp_day_house_info_corporate 中检索所有行,其中 if 语句中的 @info 和 @canal 检索到 0。

感谢您的任何帮助。

4

2 回答 2

3

Count检查记录是否存在时非常无效,你会更好not exists

IF NOT EXISTS  ( 
        SELECT * 
          FROM general..ean a,
               general..mainframe b,
               general..hope c 
        WHERE a.ean = @ean
        AND a.c_suppression = '0' 
        AND a.key = b.key           
        AND b.key = c.key
        AND c.canal = @canal
    )

如果这直到缓慢显示您的完整查询,也许有可能使其基于集合。

于 2013-06-26T09:01:53.643 回答
3
    SELECT  *
      FROM tmp_day_house_info_corporate
    WHERE not exists(
        SELECT  b.key
          FROM general..ean a,
               general..mainframe b,
               general..hope c 
        WHERE a.ean = tmp_day_house_info_corporate.ean
        AND a.c_suppression = '0' 
        AND a.key = b.key           
        AND b.key = c.key
        AND c.canal = tmp_day_house_info_corporate.canal
    )
于 2013-06-26T09:06:33.253 回答