导航
  • 主页
  • 基础类
  • 应用实例
  • 新技术前沿

mssql2000 储存过程能否循环呢?

ynquan 2008-01-17 07:48:45
有二个a和b表(二个表的列数是不一样)。a表里有7行数据,b表里有一些数据。我想用储存过程把a表里的7行数据插入到b表里,不知道怎么写呢?
还有储存过程里能否执行循环语句呢?
...全文
75 点赞 收藏 10
写回复
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
germliucaixia 2008-01-18
用游标


CREATE PROCEDURE xh_woat
AS
declare @a char(9), @b char(16)



begin transaction

declare tmp_cur cursor for
select a,b from aa
open tmp_cur
fetch next from tmp_cur into @a,@b
while @@fetch_status=0
begin
insert into bb (b,c) values (@a,@b)
if (@@error <>0)
begin
rollback transaction
end
fetch next from tmp_cur into @a,@b
end
close tmp_cur
deallocate tmp_cur

commit transaction
GO

回复
ynquan 2008-01-18
这个循环有错误,帮帮忙解决问题。
CREATE PROCEDURE xh_woat
AS
declare @a char(9), @b char(16),@n int,@i int
select @n=count(a) from aa
set @i=0

begin transaction

while @i<@n begin
select @a=a,@b=b from aa
insert into bb (b,c) values (@a,@b)
set @i=@i+1
end

commit transaction
GO
这个循环怎么能实现select语句行的移动(因为,现在aa表有4行,insert时只进同样4行数据),
还有transaction有异常处理时用rollback时在这里的那里添上?,怎么添呢?
回复
ynquan 2008-01-18
谢谢9楼成功了
回复
JL99000 2008-01-17
有直接的办法就是
insert into 表b select * from 表a
这也是最简单的方法

还有也可以循环,这么做比较慢
回复
cxmcxm 2008-01-17
可循环,可递归
回复
中国风 2008-01-17
select count(1) from a--记录数
回复
ynquan 2008-01-17
如果不知道a表的行数那怎么能得到a表的行数呢?
回复
中国风 2008-01-17
--有主健时
--
insert B(col1,col2...)
select
col1,col2....
from
a
where
not exists(select 1 from b where col1=a.col1)--排除b已存在的数据
回复
中国风 2008-01-17
--不需要循环
insert B(col1,col2.....)--指定列名
select
col1,col2...--指定顺序
from
a
回复
liangCK 2008-01-17
insert into b(xx,xx) select xx,xx from a where xxx

使用循环可以的.
回复
发动态
发帖子
MS-SQL Server
创建于2007-09-28

3.2w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
社区公告
暂无公告