2016-11-30 100 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

試試這個。

插入記錄到一個臨時表,然後再從臨時表使用的記錄。

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 

這應防止任何形式的鎖定或產生光標的延遲。