如何将一个临时表A(有多条记录)成批插入到另一表B中(100分)

  • 主题发起人 主题发起人 dennytop
  • 开始时间 开始时间
D

dennytop

Unregistered / Unconfirmed
GUEST, unregistred user!
现有一个临时表A(有多条记录),我想将其记录成批插入到另一表B中<br>假设:临时表A结构: &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br> &nbsp; &nbsp; &nbsp;A1 A2 A3 A4 四个字段<br> &nbsp; &nbsp; &nbsp;表B结构:<br> &nbsp; &nbsp; &nbsp;ID B1 B2 B3 B4 五个字段(其中B1 B2 B3 B4四个字段分别对应A1 A2 A3 A4)<br>我应如何处理,SQL应如何写,且B表的ID如何自增长(不想要SQL2000的自增长字段,要求程序控制)
 
insert into 表B(B1,B2,B3,B4) select A1,A2,A3,A4 from #表A
 
漂流的雲,谢谢你给我答复,这个我知道,我主要是不清楚如何控制B表的关键字段ID的增长,假设它是一个类似‘0001’,‘0002’,‘0003’......之类的序列号,这样成批INSERT INTO,我该在那去控制这个ID?请指教。
 
你可以先插入到一个用SQL2000的自增长字段的临时表中,然后再将临时表中数据插入到你要求的表中。
 
我的B表是一个主从表的从表,我把这部分临时表的内容导入到B表后还要再修改的,可能会删除某几条记录,这样的话我那序号就不连续了
 
我告诉你一个我经常用到的方法<br>先根据A生成一个自动增长的临时表<br>select IDENTITY(Int) as FID,A1,A2,A3,A4 into ##abcd from A<br>再将临时表的FID格式化插入到B表<br>insert (ID,B1,B2,B3,B4) <br>select Right('000'+Convert(Varchar(4),FID),4),<br> &nbsp; &nbsp; &nbsp; A1,A2,A3,A4 from ##abcd
 
hellfire2008,谢谢,这是一个好方法。若我删除其中几条的话,能否重新排一下序号来防止断号
 
按你說的就只好用遊標了!<br>declare @i int<br>declare @str varchar(4)<br>declare cursorA cursor for select * from A<br>set @i=0<br>open cursorA<br>fetch next from cursorA into @A1,@A2,@A3,@A4<br>while @@fetch_status = 0 <br>begin<br> &nbsp;set @i=@i+1<br> &nbsp;if @i &lt; 10 <br> &nbsp; &nbsp;set @str= '000'+Cast(@i as varchar(4))<br> &nbsp;else if @i &lt; 100 <br> &nbsp; &nbsp;set @str= '00'+Cast(@i as varchar(4))<br> &nbsp;else if @i &lt; 1000 <br> &nbsp; &nbsp;set @str= '0'+Cast(@i as varchar(4))<br> &nbsp;else if @i &lt; 10000 <br> &nbsp; &nbsp;set @str= Cast(@i as varchar(4))<br> &nbsp; &nbsp;<br> &nbsp;insert B(ID, B1, B2, B3, B4)<br> &nbsp;values(@str,@A1,@A2,@A3,@A4)<br><br>fetch next from cursorA into @A1,@A2,@A3,@A4<br>end
 
可以啊.你删除后.再用此方法就行了.因为临时表每次都需要建立的.所以你重新建立.<br>自动增长肯定是再重1开始自动增长的
 
关于自动增量ID问题:为什么总是考虑断号呢?你这个号是干什么用的,如果是一个带特定含义的编号,用程序处理就是了。否则如果 只是一个ID号,没其他含义,断号又有什么影响
 
楼上的说得有理.这种序号断不断号对于楼主应该没有什么问题吧
 
谢谢大家,都有分! 我用hellfire2008实现了,gaobangsheng的游标我还不会,要看看。
 
刚才忘了点发分了[:D]
 
我还相问一下,如果我的B表是用ADOQuery连的,我可以用catchUpdate吗,应如何?
 
我靠,樓主不厚道:你說的:<br>“不想要SQL2000的自增长字段,要求程序控制”<br>我才不用遊標的,hellfire2008的方法我也會,有什麼了不起!你說的不能用自增長字段的啊!氣死我了,給這 麼點分我!
 
Right('000'+Convert(Varchar(4),FID),4),這一句太經典,hellfire2008-60曆害
 
Right('000'+Convert(Varchar(4),FID),4),<br>是格式化吗?
 
gaobangsheng兄.<br>dennytop说的是不想要SQL2000的自增长字段,要求程序控制<br>就是指要格式化的四位字符.他说的也没错啊.<br>况且我先回答.应该的.哈哈.算是抢答吧.分自然给的高了.<br><br>playermeng.我的格式化你看不懂吗
 
gaobangsheng也不要太小气,我现在也只有100分了,下次给多点你了,不过要对我的问题积极点
 

Similar threads

I
回复
0
查看
692
import
I
I
回复
0
查看
851
import
I
I
回复
0
查看
594
import
I
后退
顶部