select查询后循环处理的问题

UJin 2008-06-12 11:34:21
select a,b from table1
然后针对每个记录作处理,然后存储到另一个表table2中,应该怎么处理?sql语句怎么写?
...全文
173 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
haonanernet 2008-06-12
  • 打赏
  • 举报
回复
那就用游标啊


DECLARE @a VARCHAR(20),@b VARCHAR(20)
DECLARE table1_cursor CURSOR
FOR SELECT a,b FROM table1

OPEN table1_cursor
FETCH NEXT FROM table1_cursor INTO @a,@b

WHILE @@FETCH_STATUS=0
BEGIN
这里用存储过程处理 @a,@b
--处理完后将 @a,@b insert到table2里面
......

FETCH NEXT FROM table1_cursor INTO @a,@b
END

CLOSE table1_cursor
DEALLOCATE table1_cursor

hyqwan11112 2008-06-12
  • 打赏
  • 举报
回复
复杂的处理可能还是要用游标哈
UJin 2008-06-12
  • 打赏
  • 举报
回复
[Quote=引用楼主 UJin 的帖子:]
select a,b from table1
然后针对每个记录作处理,然后存储到另一个表table2中,应该怎么处理?sql语句怎么写?
[/Quote]

没有说明白,每条都要处理,是指对于每条记录的某个字段要使用一个存储过程处理一下
比如select a,b from table1
要用存储过程对a处理,然后把处理后的a和b插入到table2
UJin 2008-06-12
  • 打赏
  • 举报
回复
没有说明白,每条都要处理,是指对于每条记录的某个字段要使用一个存储过程处理一下
比如select a,b from table1
要用存储过程对a处理,然后把处理后的a和b插入到table2
lgxyz 2008-06-12
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 dobear_0922 的回复:]
引用 2 楼 wzy_love_sly 的回复:
游标


尽量不要用游标,,,
[/Quote]
为什么不推荐用游标?
游标有咋,严重缺点?
Novelty 2008-06-12
  • 打赏
  • 举报
回复
用游标。
UJin 2008-06-12
  • 打赏
  • 举报
回复
顶楼没有说明白,每条都要处理,是指对于每条记录的某个字段要使用一个存储过程处理一下
比如select a,b from table1
要用存储过程对a处理,然后把处理后的a和b插入到table2
ojuju10 2008-06-12
  • 打赏
  • 举报
回复
insert into table2(a,b)
select a,b from table1
tianyusunkuangyu 2008-06-12
  • 打赏
  • 举报
回复
什么对每个记录作处理,
具体问题具体解决
不一样的处理旧有不一样的解决办法
昵称被占用了 2008-06-12
  • 打赏
  • 举报
回复
大部分情况是可以用语句实现的
子陌红尘 2008-06-12
  • 打赏
  • 举报
回复
如果有复杂的业务逻辑,可以把业务逻辑说明,看是否能在一条到几条SQL语句之内实现。

否则,最后的办法就是使用游标,如下:



DECLARE @a VARCHAR(20),@b VARCHAR(20)
DECLARE table1_cursor CURSOR
FOR SELECT a,b FROM table1

OPEN table1_cursor
FETCH NEXT FROM authors_cursor INTO @a,@b

WHILE @@FETCH_STATUS=0
BEGIN
--处理将table1数据insert到table2的相关逻辑
......

FETCH NEXT FROM authors_cursor INTO @a,@b
END

CLOSE table1_cursor
DEALLOCATE table1_cursor
昵称被占用了 2008-06-12
  • 打赏
  • 举报
回复
处理是什么很重要

可能用语句就可以实现,比如
insert table2(x,y) select a+1,b-1 from table1 --这里的处理是 a=a+1,b=b-1

也可能需要用游标实现
wzy_love_sly 2008-06-12
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 dobear_0922 的回复:]
引用 2 楼 wzy_love_sly 的回复:
游标
尽量不要用游标,,,
[/Quote]

那用啥啊熊?while?

wzy_love_sly 2008-06-12
  • 打赏
  • 举报
回复
--声明游标
DECLARE AccountCursor
CURSOR FOR SELECT id FROM tb

--打开游标
declare @accountid int
open AccountCursor
FETCH NEXT FROM AccountCursor
INTO @AccountID
WHILE @@FETCH_STATUS = 0
begin
--取第一行的值给变量

--执行语句
INSERT INTO result
SELECT [ID],[Name1]
FROM tb
WHERE [ID] = @AccountID
FETCH NEXT FROM AccountCursor
INTO @AccountID

end

CLOSE AccountCursor

--释放游标
DEALLOCATE AccountCursor
nzperfect 2008-06-12
  • 打赏
  • 举报
回复
insert into table2(a,b)
select 处理(a),处理(b) from table1
中国风 2008-06-12
  • 打赏
  • 举报
回复
?
----------讓大家猜?
dobear_0922 2008-06-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wzy_love_sly 的回复:]
游标
[/Quote]

尽量不要用游标,,,
nzperfect 2008-06-12
  • 打赏
  • 举报
回复
insert into (a,b)
select 处理(a),处理(b) from table1
liangCK 2008-06-12
  • 打赏
  • 举报
回复
看你是什么处理?..
简单的..可以直接在select里做..

复杂的..使用游标.
dobear_0922 2008-06-12
  • 打赏
  • 举报
回复
insert table2
select a+1, b+2 from table1
加载更多回复(2)

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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