如何在此查询中丢失游标用法?

时间:2014-01-24 01:25:06

标签: sql sql-server sql-server-2008 cursor

我知道这听起来应该被标记为家庭作业,但我真的需要帮助。

此程序

OPEN @Iterador

FETCH NEXT FROM @Iterador INTO @GrupoMedidas

WHILE @@FETCH_STATUS = 0
BEGIN
    INSERT INTO @Resultado(GrupoMedidas
                          , TextoPregunta
                          , ANTERIOR
                          , ENERO
                          , FEBRERO
                          , MARZO
                          , ABRIL
                          , MAYO
                          , JUNIO
                          , JULIO
                          , AGOSTO
                          , SEPTIEMBRE
                          , OCTUBRE
                          , NOVIEMBRE
                          , DICIEMBRE)
        SELECT @GrupoMedidas
            , TextoPregunta
            , ANTERIOR
            , ENERO
            , FEBRERO
            , MARZO
            , ABRIL
            , MAYO
            , JUNIO
            , JULIO
            , AGOSTO
            , SEPTIEMBRE
            , OCTUBRE
            , NOVIEMBRE
            , DICIEMBRE
        FROM [dbo].[FRespuestasGrupo](@Anio, @GrupoMedidas)

    FETCH NEXT FROM @Iterador INTO @GrupoMedidas
END

在相对较小的数据库上运行需要38秒。我已经读过,游标在陆地或RDBMS系统中绝对是邪恶的,并且出于性能原因应该避免使用游标,但是我不能 - 为了我的生活 - 想象一种方法来减少光标的使用。< / p>

这个程序现在正在实现的目标(痛苦地缓慢)是将问题集(@GrupoMedidas)与每个问题配对,这样决赛桌中的每一行都会像

一样结束。
Question-Set-Name|Question-Name-1|Answer-For-January|Answer-For-February...
Question-Set-Name|Question-Name-2|Answer-For-January|Answer-For-February...

(表格架构以西班牙语列出)

FRespuestasGrupo负责列出给定问题集的所有问题,并提供作为参数提供的年度中每个月的答案。

此查询中涉及的所有其他过程已经从游标中删除,所以这是我现在的最后希望。

0 个答案:

没有答案