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
我一直在尝试创建一个将传递多个变量的游标,然后游标内的 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