首页 新闻 赞助 找找看

请教批量更新数据库方案

0
悬赏园豆:50 [已解决问题] 解决于 2011-05-24 14:45

需求是这样的,要把一批数据导入数据库(约1万条),每一条数据是由几个表的字段组成的,示例如下:

表A

ID A1 A2

表B

ID B1 B2 B3 B4 AID(外键)

现在要导入的数据格式为

A1 A2 B1 B2 B3 B4

请问有没有比较好的解决方案,谢谢!

artwl的主页 artwl | 专家六级 | 园豆:16736
提问于:2011-05-24 13:52
< >
分享
最佳答案
0

一、可以用游标,一条条insert,每次两个表。

二、关联表更新,增加一个源表主键Xid

 

use testdb2
go
/*******************建立测试数据***3w@live.cn***********************/
IF NOT OBJECT_ID('[TBXXX]') IS NULL
DROP TABLE [TBXXX]
GO
CREATE TABLE [TBXXX](
[Xid] int identity(1,1) primary key,
[A1] NVARCHAR(20) null,
[A2] NVARCHAR(20) null,
[B1] Nvarchar(10) null,
[B2] NVARCHAR(20) null
)
go

INSERT INTO TBXXX
SELECT 'a1',replicate('A1',6),replicate('B1',4),replicate('B1',5) union ALL
SELECT 'a2',replicate('A2',6),replicate('B2',4),replicate('B2',5) union ALL
SELECT 'a3',replicate('A3',6),replicate('B3',4),replicate('B3',5) union ALL
SELECT 'a4',replicate('A4',6),replicate('B4',4),replicate('B4',5)
go

IF NOT OBJECT_ID('[tbA]') IS NULL
DROP TABLE [tbA]
GO
CREATE TABLE [tbA](
[Aid] int identity(1,1) primary key,
[A1] NVARCHAR(20) null,
[A2] NVARCHAR(20) null,
[Xid] int null
)
go


IF NOT OBJECT_ID('[tbB]') IS NULL
DROP TABLE [tbB]
GO
CREATE TABLE [tbB](
[Bid] int identity(1,1) primary key,
[B1] Nvarchar(10) null,
[B2] NVARCHAR(20) null,
[Aid] int null,
[Xid] int null
)
go

insert into [tbA] select A1, A2,XId from [TBXXX]
insert into [tbB] (Aid,Xid) select AID,Xid from [tbA]
----select * FROM [tbB]

update [tbB] SET B1=t.B1,B2=t.B2
FROM [TBXXX] t INNER JOIN [tbB] on t.Xid=[tbB].Xid

ALTER table [tbA]
drop column Xid
GO

ALTER table [tbB]
drop column Xid
GO

SELECT * FROM [tbA]
select * FROM [tbB]
收获园豆:50
邀月 | 高人七级 |园豆:25475 | 2011-05-24 14:33
非常感谢!
artwl | 园豆:16736 (专家六级) | 2011-05-24 14:45
@
天行健 自强不息:^_^
邀月 | 园豆:25475 (高人七级) | 2011-05-24 14:48
其他回答(1)
0

这个用连表应该可以解决的吧!

冰 鱼 | 园豆:282 (菜鸟二级) | 2011-05-24 13:56
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册