怎样写这样的存储过程? (100分)

  • 主题发起人 主题发起人 windwy
  • 开始时间 开始时间
W

windwy

Unregistered / Unconfirmed
GUEST, unregistred user!
在DELPHI程序中代码
query3.sql.add('select * from table1');
query3.open;

if not QUERY3.Eof then
begin
if query3.fields[0].asinteger=1 then a:=100 else a:=0
if query3.fields[1].asinteger=0 then b:=100 else b:=0
query2.ParamByName('a').asinteger :=a;
query2.ParamByName('b').asinteger :=b;
query2.execsql;
query3.next
end;
怎样在存储过程中实现这个循环,和付值
补充:
query2.sql.add('update table2 set a=:a,b=:b');
效率第一, 以前的程序运行等待时间太长, 用户不满意,



 
通用的和效率最低的办法就是用游标了.
不过根据不同的查询需求,可以优化,甚至不用游标实现.
你的整个问题好像没写清楚,例如query2干什么用的.
 
把你QUERY2的SQL写出来!
 
你的query2也太....,连一个条件也没有.
update table2 set a=:a,b=:b是把所有table2的记录都update为a=:a,b=:b,
那你何必用什么循环呢,直接找到query3的最后一条记录,然后update不就完了.
给你一个用游标的例子:

declare @a int
declare @b int

Declare authors_table CURSOR FOR
select (case when aa=1 then 100 else 0 end),(case when bb=1 then 100 else 0 end) from table1

Open authors_table

FETCH NEXT FROM authors_table into @a,@b

while @@fetch_status=0
begin
/* 这里面写 update table2的工作*/
FETCH NEbXT FROM authors_table into @a,@b
end
close authors_table
DEALLOCATE authors_table

 
如果数据记很大的话,用游标的proc不会提高多少效率。建议依然用query3作判断,
把Query2改成proc。if过后调用即可。
 
to:bluerain
QUERY2是有条件的, 条件太长。
我知道要怎样实现了, 多谢提醒。 我晚上试一下效率。
to:1382
数据量比较多,
在这个外面还有一个循环。

看看还有好的解决方法,
明天结束。


 
多人接受答案了。
 
后退
顶部