首页 新闻 会员 周边

数据库里的游标

0
悬赏园豆:50 [已关闭问题] 关闭于 2012-03-29 20:42

找了不用游标实现循环的方法  用while循环   Row_number 代表行数  如下这种写法

while(@int < Row_number)begin

--sql语句

set @int = @int +1

end     这种方法有比游标好吗

 都说游标最好不要用 那么比如删除一行数据  删除这行数据的同时要根据这行数据里某个字段的值 删除里一个表的一行数据。  同时删100行的时候 就在程序里for循环100次吗

问题补充:

 同时删100行的时候 就在程序里for循环100次吗  还是在数据库里使用游标好点?

koi的主页 koi | 初学一级 | 园豆:4
提问于:2012-03-15 13:07
< >
分享
所有回答(5)
0

那要看你的条件是什么样的。如果100行的条件跟别人不一样,直接一个Sql语句就可以了。如果根据递增ID那就要循环了。

悟行 | 园豆:12559 (专家六级) | 2012-03-15 13:09

我是两个问题

支持(0) 反对(0) koi | 园豆:4 (初学一级) | 2012-03-15 13:34
0

最好是用索引删除,并且能一次删除的就一次删除,因为非索引删除都是去遍历整个表的,一次删除只遍历一次。

az235 | 园豆:8483 (大侠五级) | 2012-03-15 13:33

我是两个问题

支持(0) 反对(0) koi | 园豆:4 (初学一级) | 2012-03-15 13:33
0

正如你所说,用游标是不合适的

可以使用表变量,先把A表中需要删除列的Key放到表变量中,然后删除A表中的数据,然后再根据存储到表变量中的Key删除B表的数据。

A表 列名 col1,col2,col3

B表 列明 col2,colB1,colB3

declare @table table(a int)

insert into @table (a) select col2 from A where ...

delete from A where ...

delete from B where col2 in (select a from @table)
玉开 | 园豆:8822 (大侠五级) | 2012-03-15 17:54
0
decalre @tb table(col1 int)

delete output deleted.col1 into @tb from A where ...

delete from B where col1 in (select col1 from A)
小小刀 | 园豆:1991 (小虾三级) | 2012-03-15 19:55

使用output 输出

支持(0) 反对(0) 小小刀 | 园豆:1991 (小虾三级) | 2012-03-15 19:56
0

游标可以方便逐行处理的业务,但是维护游标也要开销,所以最好不用

Will Zh | 园豆:205 (菜鸟二级) | 2012-03-26 17:57

有回等于没回

支持(0) 反对(0) koi | 园豆:4 (初学一级) | 2012-03-26 19:31
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册