1

我已经为某人接管了一个项目,此时我们正试图让应用程序可用,而不是担心最好的方法。也就是说,光标似乎存在我无法弄清楚的问题。我游标中的选择语句返回 6 行...

DECLARE testCursor cursor for 

select r.fldcode, r.rescode, r.[class], f.[print], r.[r print], f.[requestor], r.[r requestor]
    from field f INNER JOIN resv r 
    ON f.fldcode=r.fldcode
    where f.requestor = 'Admin Resdas' OR r.[r requestor] = 'Admin Resdas'

Open testCursor
Fetch Next from testCursor;

While @@FETCH_STATUS = 0
    BEGIN   
        PRINT 'IN HERE'
        Fetch Next FROM testCursor
    END

close testCursor
Deallocate testCursor

如果我在 SQL Management Studio 中运行它,它只会继续运行,但如果我将“OR”更改为“AND”,则光标运行得很好。我错过了什么使它无法使用“OR”语句正确运行?有时不会填充两列,这就是为什么我需要“或”来工作它只是没有意义,因为语句本身执行得很好。

在此先感谢您的帮助...

4

1 回答 1

0

f.requestor 和/或 r.requestor 上可能有一个索引,它可以使用“and”条件而不是“or”条件来评估查询。(不确定 SQL Server 优化器对此类事情的智能程度)

您可以尝试单独运行两个查询的联合——这应该返回相同的结果,并且有时在优化器感到困惑时会有所帮助。

select r.fldcode, r.rescode, r.[class], f.[print], r.[r print], f.[requestor], r.[r requestor]
    from field f INNER JOIN resv r 
    ON f.fldcode=r.fldcode
    where f.requestor = 'Admin Resdas'
union
select r.fldcode, r.rescode, r.[class], f.[print], r.[r print], f.[requestor], r.[r requestor]
    from field f INNER JOIN resv r 
    ON f.fldcode=r.fldcode
    where r.[requestor] = 'Admin Resdas'
于 2014-07-29T17:41:05.190 回答