找了不用游标实现循环的方法 用while循环 Row_number 代表行数 如下这种写法
while(@int < Row_number)begin
--sql语句
set @int = @int +1
end 这种方法有比游标好吗
都说游标最好不要用 那么比如删除一行数据 删除这行数据的同时要根据这行数据里某个字段的值 删除里一个表的一行数据。 同时删100行的时候 就在程序里for循环100次吗
同时删100行的时候 就在程序里for循环100次吗 还是在数据库里使用游标好点?
那要看你的条件是什么样的。如果100行的条件跟别人不一样,直接一个Sql语句就可以了。如果根据递增ID那就要循环了。
我是两个问题
最好是用索引删除,并且能一次删除的就一次删除,因为非索引删除都是去遍历整个表的,一次删除只遍历一次。
我是两个问题
正如你所说,用游标是不合适的
可以使用表变量,先把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)
decalre @tb table(col1 int)
delete output deleted.col1 into @tb from A where ...
delete from B where col1 in (select col1 from A)
使用output 输出
游标可以方便逐行处理的业务,但是维护游标也要开销,所以最好不用
有回等于没回