Я пытаюсь создать курсор, который передаст несколько переменных, а затем, в конечном итоге, выбор, находящийся внутри курсора, в конечном итоге станет обновлением. Но для моих предварительных этапов это будет просто выбор.Ошибка SQL Cursor - в настоящее время нет выделенного курсора
Однако, когда я запускаю это, я получаю сообщение об ошибке несколько раз. «В переменной« @Cur »в данный момент нет выделенного курсора»
Прошу, пожалуйста, получить некоторую помощь с SQL, поскольку я не уверен, что с ней происходит? Я уверен, что это что-то простое, но я не могу это понять.
PS. игнорировать номера столбцов и номера таблиц, это было, например, для целей.
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
Просьба указать используемые dbms. (Это совсем не похоже на ANSI SQL ...) – jarlh
Это настоящий скрипт, который вы используете? Никакие СУБД, о которых я знаю, позволят использовать некотируемые пробелы в именах таблиц и переменных ... – Siyual
Почему вы создаете временную таблицу, если вы ее никогда не читали (не говоря уже о том, что вы ее дважды бросаете)? –