2016-11-30 5 views
0

Я работаю над представлением с множеством операторов выбора и вычислений в фоновом режиме.SQL Server курсор слева присоединиться

Один запрос на курсор вызывает проблему, и я не должен начинать исправлять эту проблему.

Заявление SQL ниже работает нормально. Я добавил WAn_AnzTage, который хранится в TWorkflowAntraege и @_wananztage для получения следующего значения. Эти два дополнения теперь прокомментированы из сценария. Как только я добавлю их в скрипт, я больше не получаю возвращаемых значений.

Однако, когда я запускаю скрипт как сам SQL-запрос вне курсора с фиксированными значениями, все работает нормально.

declare cur cursor for 
    select 
     WPo_DatumVon, WPo_DatumBis, WPo_AbwArt, WPo_AbwTag --, WAn_AnzTage 
    from 
     TWorkflowAntraege 
    inner join 
     TWorkflowPool on WAn_AntragsNr = WPo_AntragsNr 
    inner join 
     TAbwArt on Abw_AbwArt = WPo_AbwArt 
    where 
     wan_persnr = @3 
     and (Wan_WorkflowStatus = 0 or WAn_WorkflowStatus = 4) 
     and Wan_Antragsart = 2 
     and WPo_AbwArt like @_likeabw 
     and ((WPo_DatumVon >= @_date and WPo_DatumBis <= @5) 
      OR (WPo_DatumVon < @_date and WPo_DatumBis >= @_date) 
      OR (WPo_DatumVon < @5 and WPo_DatumBis >= @5)) 
     and WPo_AbwArt like @_likeabw 

open cur 

fetch next from cur 
     into @_datumvon, @_datumbis, @_abwart, @_abwtag --, @_wananztage 

while (@@FETCH_STATUS = 0) 
begin 
    -- something something 
    -- not touching WAn_AnzTage yet. 
end 

close cur 
deallocate cur 
+0

Какая версия SQL Server? –

ответ

0

Попробуйте вот так.

Сначала введите записи в временную таблицу, а затем используйте записи из таблицы temp.

CREATE TABLE #temp_TWorkflowAntraege (
    WPo_DatumVon NVARCHAR(10) 
    ,WPo_DatumBis NVARCHAR(10) 
    ,WPo_AbwArt NVARCHAR(10) 
    ,WPo_AbwTag NVARCHAR(10) 
    ) 

insert into #temp_TWorkflowAntraege 
SELECT WPo_DatumVon 
    ,WPo_DatumBis 
    ,WPo_AbwArt 
    ,WPo_AbwTag --, WAn_AnzTage 
FROM TWorkflowAntraege 
INNER JOIN TWorkflowPool ON WAn_AntragsNr = WPo_AntragsNr 
INNER JOIN TAbwArt ON Abw_AbwArt = WPo_AbwArt 
WHERE wan_persnr = @3 
    AND (Wan_WorkflowStatus = 0 OR WAn_WorkflowStatus = 4) 
    AND Wan_Antragsart = 2 
    AND WPo_AbwArt LIKE @_likeabw 
    AND ((WPo_DatumVon >= @_date 
    AND WPo_DatumBis <= @5) OR (WPo_DatumVon < @_date AND WPo_DatumBis >= @_date) OR (WPo_DatumVon < @5 AND WPo_DatumBis >= @5)) 
    AND WPo_AbwArt LIKE @_likeabw 


DECLARE cur CURSOR 
FOR 
SELECT WPo_DatumVon 
    ,WPo_DatumBis 
    ,WPo_AbwArt 
    ,WPo_AbwTag 
FROM #temp_TWorkflowAntraege 

OPEN cur 

FETCH NEXT 
FROM cur 
INTO @_datumvon 
    ,@_datumbis 
    ,@_abwart 
    ,@_abwtag --, @_wananztage 

WHILE (@@FETCH_STATUS = 0) 
BEGIN 
    -- something something 
    -- not toching WAn_AnzTage yet. 
END 

CLOSE cur 

DEALLOCATE cur 
0

Попробуйте обновить свой Declare заявление следующим образом:

Declare cur Cursor Local Fast_Forward For 

Это должно предотвратить какой-либо блокировки или задержки в создании курсора.

Смежные вопросы