简单问题,快来拿分,急(100分)

  • 主题发起人 主题发起人 LSS
  • 开始时间 开始时间
L

LSS

Unregistered / Unconfirmed
GUEST, unregistred user!

CREATE PROCEDURE Procename as
...
if ... begin
select * from ...
if @@rowcount=0 goto label
end else begin
:label
select * from .....
end

如果第一个SQL查询到数据则直接返回第一个查询结果数据集
如果没有查询到,则执行第二个查询,但在这种情况下就返回
二个数据集(第一个为空集,第二个查询到若干数据),在
Delphi方面取数据集只能取到第一个空集,而取不到第二个数
据集,如何解决,或是否在goto后边有类似下边的语句:
if @@rowcount=0 begin
ClearResult
goto label
end
请各位指教

 
CREATE PROCEDURE Procename as
...
if exists(select * from ...) begin
select * from ...
end else begin
select * from .....
end
 
cytown的方法是可行的,也是我个人目前认为最好的方法
(比count(*)好:))

 
来看看。
 
LSS:我的ISDN刚刚接通
 
cytown:你的程序执行时间=我的程序执行时间*2
是吗?
或是
你的程序执行时间>我的程序执行时间
 
menxin:
你上ISDN了?爽不爽?费用如何?
LSS:
你认为cytown的方法不好吗?执行时间会是你的2倍?!
 
爽当然爽啦!64K连接时下载速度就有8K了。费用也差不多! :)
 
深深鞠躬
呵呵,再次抱歉:-)
menxin原来和LSS认识:)))
再鞠躬
sorry
三鞠躬
 
<pre><pre class="text">
我这样做目的是查询一个结果:
如果条件是精确快速查询
执行精确快速查询
如果没有查询到任何记录 则跳转到执行模糊查询
如果执行模糊查询
执行模糊查询
结束
不知您看明白了吗,我想使用最少的查询得出结果,但并没有ClearResult这个
方法
如果先用 Exist(Select...)判断,再用Select取结果,是不是多了一次查
询,我
并不是非要强调这点使用时间,只是想知道这种使用方法并尽可能提高查询效率

该问题的为
http://www.gislab.ecnu.edu.cn/delphibbs/dispq.asp?LID=144312

&amp;gt; CREATE PROCEDURE Procename as
&amp;gt; ....
&amp;gt; if ... begin
&amp;gt; select * from ...
&amp;gt; if @@rowcount=0 goto label
&amp;gt; end else begin
&amp;gt; :label
&amp;gt; select * from .....
&amp;gt; end
&amp;gt;
&amp;gt; 如果第一个SQL查询到数据则直接返回第一个查询结果数据集
&amp;gt; 如果没有查询到,则执行第二个查询,但在这种情况下就返回
&amp;gt; 二个数据集(第一个为空集,第二个查询到若干数据),在
&amp;gt; Delphi方面取数据集只能取到第一个空集,而取不到第二个数
&amp;gt; 据集,如何解决,或是否在goto后边有类似下边的语句:
&amp;gt; if @@rowcount=0 begin
&amp;gt; ClearResult
&amp;gt; goto label
&amp;gt; end


</font></pre>
 
呵呵, exists(select xxx)这条语句其实并不从服务器返回任何东西, 速度可以
忽略, 不信, 你可以select一个>1000000条数据的table和&amp;lt;10条table用exist判断,
是一样的.
而且, 如果真的not exists, 你的方法却>>>>我的方法:-)
 
>先用 Exist(Select...)判断,再用Select取结果,是不是多了一次查询
是的,但是我个人认为并不会造成问题,因为
exist是一旦检测到匹配数据立刻停止,并不会再查寻下去,
所以如果不是空,那么exist一旦检测到有匹配数据,立刻就会去执行第2条
sql语句,如果为空那么执行第3条sql语句.
>if @@rowcount=0
如果用这种方法,如果为空,那么还是做了两次,而且可能更慢一点
当然如果不为空,那只是一次,肯定快,但我认为也就快一点

这样把,你不妨做测试,记录时间,比较一下
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部