【问题标题】:SQL cursor with OR statement带有 OR 语句的 SQL 游标
【发布时间】:2014-07-29 17:24:17
【问题描述】:

我已经为某人接手了一个项目,此时我们正在努力让应用程序可用,而不是担心最好的方法。也就是说,光标似乎存在我无法弄清楚的问题。我游标中的 select 语句返回 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”语句正确运行?有时不会填充两列,这就是为什么我需要“或”来工作它只是没有意义,因为语句本身执行得很好。

提前感谢您的帮助...

【问题讨论】:

  • 也许尝试使用 where 'Admin Resdas' In (f.requestor , r.[r requestor])
  • OR 查询应返回更多行,但不应导致无限循环。
  • 查询工作正常,FOR 查询的结果集可能非常大。
  • field 和 resv 中有多少条记录包含“Admin Resdas”? Select count(*), 'F' as tbl from field where requestor='Admin Resdas' union all select count(*), 'r' as tbl from resv where [r requestor] = 'Admin Resdas' 你说 6 when and... 但是或可能是 100 万... 这个选择可能有助于量化问题
  • 对不起,我之前没有看到这个,我尝试了 'Admin Resdas' In (f.requestor, r.[r requestor]) 并遇到了同样的问题。

标签: sql cursors


【解决方案1】:

在 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'

【讨论】:

  • 我试过这个union语句,游标跑的很快!
猜你喜欢
  • 2014-07-09
  • 2013-03-25
  • 1970-01-01
  • 2017-08-15
  • 1970-01-01
  • 2011-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多