很简单的问题,不用游标,遍历表中或查询结果的每条记录

Michael_javavb 2005-12-16 04:29:21
因为游标是很耗费时间和资源的,因此我不希望通过游标来遍历数据库中的表。
就用一般的sql语句和循环控制来实现

比如:表1
字段: name age
Michael 20
John 23
Mary 24

目的: 把每条记录单独抽出来进行操作(循环),但不使用游标
大家提供好方法,都给分
...全文
592 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
Michael_javavb 2005-12-28
  • 打赏
  • 举报
回复
对了,问一下有开发经验的兄弟,coding时碰到需要向客户确定的事情,但是又无法得到及时回答的时候,一般会怎么做,以方便以后的工作?
Michael_javavb 2005-12-28
  • 打赏
  • 举报
回复
准备在06的元旦结贴,纯顶的朋友一人一分,回答问题的十分。

乘此在多问一下,我在作为服务器的机器上用sa登录,也就是只要用拥有足够权限的帐户就可以对存贮在其上的store procedure进行debug,

但是我如果从远端用查询分析器对存在server上的store procedure进行debug时,就是无法单步执行,断点设了也没用,那个debug按钮条上除了执行和设/取消断点的按钮可以点,其他都是灰色的(比如step over,step in等),而且我也用sa帐户进行登录操作也不行,

请问兄弟们知道怎么从远程对server上的存储过程debug?
passionke 2005-12-28
  • 打赏
  • 举报
回复
coding的时候怎么还会要向客户确定,除非:
1、需求变更
这个时候肯定要做补充合同 来说明 功能变更以及工期的问题
2、设计不合理,那就是自己的责任了
这个就难说了 如果客户同意 可做补充合同
客户一定要按原合同执行 那你就承担责任吧
建哥聊IT 2005-12-23
  • 打赏
  • 举报
回复
学习!
Michael_javavb 2005-12-22
  • 打赏
  • 举报
回复
游标的确是很方便,编程的效率提高了,但是现在服务端的数据还很少,将来数据一多,呵呵,反正是客户自己要求使用游标的,还给了使用的coding rule,到时runtime的时候就怪不得我们了。
zhaoanle 2005-12-22
  • 打赏
  • 举报
回复
听邹老大的
常飞梦 2005-12-22
  • 打赏
  • 举报
回复
学习
GSXiaoXiao 2005-12-22
  • 打赏
  • 举报
回复
我觉得需要一行数据就去读一次表应该会更慢
youyu111 2005-12-21
  • 打赏
  • 举报
回复
我也很想知道,实际中总是碰到要处理大量数据,比如生成1000条数据的清单,对应的主单,同时在同一transaction中还需要生成其他相关的处理,大家碰到数据的处理量比较大,后台生成数据又比较多时,一般采用哪些优化的方法?设计采用的是三层架构,网络传输虽然是专线,但是终端用户在不断增加,业务量也在不断增加,预计可能还要翻倍,不知道如何处理,来这里学习,也请高手指点一二,谢谢!
新鲜鱼排 2005-12-21
  • 打赏
  • 举报
回复
数据的数量有上限么??
Michael_javavb 2005-12-21
  • 打赏
  • 举报
回复
反正我都会给分的,因为问题本身已经无所谓了,客户方面同意使用游标
Michael_javavb 2005-12-21
  • 打赏
  • 举报
回复
谢谢大家的回答,在踊跃一点吧
zjcxc 元老 2005-12-16
  • 打赏
  • 举报
回复
如果一定要遍历处理数据的话, 不用游标没有提高效率的意义,
子陌红尘 2005-12-16
  • 打赏
  • 举报
回复
--生成测试数据
create table 表1(name varchar(10),age int)
insert into 表1 select 'Michael',20
insert into 表1 select 'John ',23
insert into 表1 select 'Mary ',24
GO

--借助含自增列的表变量实现循环处理过程
declare @t table(id int identity(1,1),name varchar(10),age int)
declare @i int,@name varchar(10),@age int
set @i = 1

insert into @t select * from 表1

select @name=name,@age=age from @t where id=@i
while @@rowcount<>0
begin
print 'name='+@name+';age='+rtrim(@age)
set @i=@i+1
select @name=name,@age=age from @t where id=@i
end
go

/*
name=Michael;age=20
name=John ;age=23
name=Mary ;age=24
*/

--删除测试数据
drop table 表1
brooks105 2005-12-16
  • 打赏
  • 举报
回复
如果姓名不重复

create table a ( name varchar(10),age int )
insert into a
select 'Michael' ,20
union all
select 'John' ,23
union all
select 'Mary' ,24

select * into b from a

declare @i int
select @i=count(1) from b
while @i>0
begin
select top 1 * from b
delete b
where name in (select top 1 name from b)
set @i=@i-1
end

name age
---------- -----------
Michael 20

(所影响的行数为 1 行)


(所影响的行数为 1 行)

name age
---------- -----------
John 23

(所影响的行数为 1 行)


(所影响的行数为 1 行)

name age
---------- -----------
Mary 24

(所影响的行数为 1 行)


(所影响的行数为 1 行)










zhouhaihe 2005-12-16
  • 打赏
  • 举报
回复
up

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧