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

这应防止任何形式的锁定或产生光标的延迟。