我已经为某个人接管了一个项目,此时我们正试图让应用程序变得可用,并且不担心最好的方法。也就是说,我无法弄清楚Cursor似乎存在问题。我的游标中的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'语句正确运行?有时候不会填充两个列,这就是为什么我需要'OR'来工作它只是没有意义,因为语句本身就可以正常执行。
提前感谢您的帮助......
答案 0 :(得分:0)
f.requestor和/或r.requestor上可能有一个索引可用于评估查询'和'条件但不是'或'条件。 (不确定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'