SQL 游标错误 - 当前没有分配给它的游标

SQL Cursor Error - Does not currently have a cursor allocated to it

我一直在尝试创建一个将传递多个变量的游标,然后游标内的 select 最终将成为一个更新。但对于我的初步阶段,它只是一个 select。

然而,当我 运行 时,我多次收到一条错误消息。 "The variable '@Cur' does not currently have a cursor allocated to it"

我不确定 SQL 出了什么问题,请问我能得到一些帮助吗?我确定这很简单,但我无法弄清楚。

PS。忽略列号和 table 数字,这是为了示例目的。

       DECLARE
            @VAL1 DATETIME,
            @VAL2 INT,
            @VAL3 INT

        SELECT * INTO #TEMP1 FROM
            (SELECT 
                    BS.COL,
                    BS.COL,
                    BS.COL
                FROM TABLEB
                    JOIN TABLe1 HO (NOLOCK) ON HO.COL1 = B.COL1
                    JOIN TABLE2 SPB (NOLOCK) ON B.COL2 = SPB.COL2
                    JOIN TABLE3 BS (NOLOCK) ON BS.COL1 = SPB.COL1
                    JOIN TABLE4 SPS (NOLOCK) ON SPS.COL1 = BS.COL1
                    JOIN TABLE5 P (NOLOCK) ON P.COL1 = BS.COL1
                    JOIN TABLE6 (NOLOCK) ON PS.COL1 = SPS.COL1
                WHERE BS.col1 = 'N'
                    AND SPB.COL1  = 'N'
                    AND SPS.COL2 = 'N'
                    AND PS.COL3 = 'N'
                    AND P.COL4 = 'N'
                    AND B.COL5 = 'N'
                    AND BS.COL5 IS NULL 
                    AND PS.COL6 IS NOT NULL
                    AND PS.COL6 IS NULL
                    AND PS.COL7 <= DATEADD(DAY,-10,GETDATE())
                    AND BS.COL8 IS NOT NULL) Y

        DECLARE @Cur CURSOR SELECT
                    CASE WHEN 
                        BS.COL1 IS NOT NULL 
                        THEN ISNULL((SELECT COL2 FROM TABLE1 WHERE COL2 IN (SELECT COL1 FROM #TEMP1)),PS.COL2)
                    WHEN PS.COL2 <> SPS.COL3 THEN SPS.COL5
                    ELSE PS.COL3 END AS 'DATE',
                BS.COL3,
                BS.COL2
            FROM TABLEB
                    JOIN TABLE1 HO (NOLOCK) ON HO.COL1 = B.COL1
                    JOIN TABLE2 SPB (NOLOCK) ON B.COL2 = SPB.COL2
                    JOIN TABLE3 BS (NOLOCK) ON BS.COL1 = SPB.COL1
                    JOIN TABLE4 SPS (NOLOCK) ON SPS.COL1 = BS.COL1
                    JOIN TABLE5 P (NOLOCK) ON P.COL1 = BS.COL1
                    JOIN TABLE6 (NOLOCK) ON PS.COL1 = SPS.COL1
                WHERE BS.col1 = 'N'
                    AND SPB.COL1  = 'N'
                    AND SPS.COL2 = 'N'
                    AND PS.COL3 = 'N'
                    AND P.COL4 = 'N'
                    AND B.COL5 = 'N'
                    AND BS.COL5 IS NULL 
                    AND PS.COL6 IS NOT NULL
                    AND PS.COL6 IS NULL
                    AND PS.COL7 <= DATEADD(DAY,-10,GETDATE())
                    AND BS.COL8 IS NOT NULL
                AND PS.COL 3 <= CURRENT_TIMESTAMP


        OPEN @Cur
        FETCH NEXT
        FROM @Cur INTO @VAL1 ,@VAL2,@VAL3
            WHILE @@FETCH_STATUS  = 0
            BEGIN
            SELECT * FROM TABLE1 WHERE COL1 = @VAL2
        FETCH NEXT FROM @Cur INTO @VAL1,@VAL2,@VAL3
        END
        CLOSE @Cur
        DEALLOCATE @Cur
        DROP TABLE #TEMP1

您在 "DECLARE @Cur CURSOR SELECT" 中缺少 FOR。将其更改为 "DECLARE @Cur CURSOR FOR SELECT"

在我的例子中,由于条件不匹配,下面的语句没有被触发,因此抛出了异常。

SET @Cur=CURSOR FAST_FORWARD FOR