急!!!300分!插入记录排序的SQL语句(300分)

  • 主题发起人 主题发起人 redcony
  • 开始时间 开始时间
R

redcony

Unregistered / Unconfirmed
GUEST, unregistred user!
从一个表A中Select出几百条记录Insert到另一个表B,表B中有一个Id字段(类似自动编号)。
要求插入的新记录为B中已有记录的最大Id值加1,Access和SQL Server 有没有象
Oracle的RowNum的属性可以自动取当前查询的记录行号作为一个字段的值?
别告诉我一条一条添加!
 
declare @id int
declare @sql varchar(3000)
select @id = max(id) + 1 from b
select @sql = ' SELECT IDENTITY(int, ' + convert(varchar(20),@id) + ',1) AS ID,
field1, field2, field3 into #tmp from a where ... '
+ ' insert into b select * from #tmp '
+ ' drop table #tmp '
exec (@sql)
 
Access如何做呢?
 
那还不如把ID搞成自动增长的,插入的时候就不用操心这一列了
 
var
i : integer;
sql : string;
begin
query.sql.text := 'select max(id) from b';
query.open;
i := query.fields[0].asinteger;
query.close;
query1.sql.text := 'select * from a where......';
query1.open;
try
//添加数据库开始事务语句;
while not query1.eof do
begin
inc(i);
query.sql.text :='insert into b (field1, field2, field3,......) values (
:AID, :Field2,:Field3,......)';
query.params.ParamByName('AID').asinteger := i;
query.params.ParamByName('AID').asinteger := query1.fields.fieldbyname('field1').asstring;
......;
query.ExecSQL;
query1.next;

end;

//添加数据库提交
except
//数据库回滚;
end;
end;
 
请到http://vip.6to23.com/cooldba/看看就明白了
 
Access和SQL Server 有没有象
Oracle的RowNum的属性可以自动取当前查询的记录行号作为一个字段的值?
没有,但是有自动增长字段
 
to eric.youbin
你那样影响速度,不如用存储过程
create procedure proc
as
declare @afield1 类型
declare @afield2 类型
...
declare @afieldn 类型
declare @id int
declare mycursor cursor for
select afield1,afield2,..,afieldn from a where ...
open mycursor
fetch next mycursor into @field1,@field2..@fieldn
while (@@fetch_status=0)
begin
select @id = max(id) + 1 from b
insert into b (id,bfield1,bfield2,..bfieldn)
values (@id,@field1,@field2..@fieldn)
fetch next mycursor into @field1,@field2..@fieldn
end
close mycursor
deallocate mycursor
 
我要的就是在Access下,不能用自动增长字段。快帮忙啊!
 
Access可以用自动增长字段阿,我在Access(Office XP)中已经试验成功了
 
有没有搞错?
为什么要这么干?自增益多好?

难道有什么特别的需求?
 
用子查询确定插入的 ID
 
To jsxjd: 如何用子查询确定插入的 ID?
 
用存储过程!!
加一个表
里面有当前的最大值和step两个字端!!
 
我主要问Access!
 
你可以在插之前将表中的最大记录号先取出来啊!!然后设置一个递增标志,将所有数据插入啊!
 

table1 table2
id field field
1 001 004
2 002 005
3 003 006

Select (select count(no) from table2 where field<=AA.field)+
(select max(id) from table1) as id,
field
From table2 AA

得到
id field
4 004
5 005
6 006

将数据插入table1

Insert into table1(id,field)
Select (select count(no) from table2 where field<=AA.field)+
(select max(id) from table1) as id,
field
From table2 AA

要求是table2中的field字段数据不可重复,不然会有相同ID的数据出现。
 
接受答案了.
 
后退
顶部